@panoramax/web-viewer 4.2.0-develop-4b03caba → 4.2.0-develop-ace1b4b1

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/build/index.js CHANGED
@@ -9,7 +9,7 @@
9
9
  * LICENSE file in the root directory of this source tree.
10
10
  *
11
11
  */
12
- !function(ae,ue){"object"===typeof exports&&"object"===typeof module?module.exports=ue():"function"===typeof define&&define.amd?define("Panoramax",[],ue):"object"===typeof exports?exports.Panoramax=ue():ae.Panoramax=ue()}(this,(()=>(()=>{var ae={9039:(ae,ue,nt)=>{"use strict";nt.d(ue,{A:()=>Basic});var ut=nt(4542),qt=nt(5254),Yt=nt(4964),Xt=nt(7208),ys=nt(5995),Ec=nt(7343),lu=nt(2614),uu=nt.n(lu),_u=nt(8330);nt(1865),nt(3638);class Basic extends ut.WF{constructor(){let ae=arguments.length>0&&void 0!==arguments[0]&&arguments[0];super(),this.users=["geovisio"],this["map-style"]=this.getAttribute("map-style")||(0,Xt.MapTiles)(),this.lang=this.getAttribute("lang")||null,this.endpoint=this.getAttribute("endpoint")||null,this.picture=this.getAttribute("picture")||null,this.sequence=this.getAttribute("sequence")||null,console.info(`\ud83d\udcf7 Panoramax ${this.getClassName()} - Version ${_u.rE} (4b03cab)\n\n\ud83c\udd98 Issues can be reported at ${_u.Jk.O}`),ae||(this._isInternetFast=null,(0,Ec.isInternetFast)().then((ae=>this._isInternetFast=ae)))}connectedCallback(){super.connectedCallback(),this._t=(0,Yt.getTranslations)(this.lang),this.loader=(0,ys.createWebComp)("pnx-loader",{_parent:this,"no-label":(0,Ec.isInIframe)()}),this._loadsAPI&&this.endpoint&&this._loadsAPI===this.endpoint||this.api&&this.api._endpoint===this.endpoint||!this.endpoint||((this._loadsAPI||this.api)&&(delete this.api,delete this._loadsAPI),this._setupAPI()),Object.entries({map:"map-options",psv:"psv-options",fetchOptions:"fetch-options",mapstyle:"map-style"}).forEach((ae=>{let[ue,nt]=ae;this.getAttribute(ue)&&console.error(`Component attribute "${ue}" has been renamed into "${nt}". Old attribute "${ue}" is ignored.`)}))}_setupAPI(){if(this.loader=this.loader||(0,ys.createWebComp)("pnx-loader",{_parent:this}),!this.endpoint)return void console.warn("No endpoint is defined");this._loadsAPI=this.endpoint;let ae=this.endpoint;try{this["map-style"]=JSON.parse(this["map-style"])}catch(nt){}try{this.api=new qt.A(this.endpoint,{users:this.users,fetch:this["fetch-options"],style:this["map-style"]}),this.api.onceReady().then((()=>{if(ae!=this._loadsAPI||!this.api)return;let ue=this.api.getUnavailableFeatures(),nt=this.api.getAvailableFeatures();nt=0===ue.length?"\u2705 All features available":"\u2705 Available features: "+nt.join(", "),ue=0===ue.length?"":"\ud83d\udeab Unavailable features: "+ue.join(", "),console.info(`\ud83c\udf10 Connected to API "${this.api._metadata.name}" (${this.api._endpoint})\n\u2139\ufe0f API runs STAC ${this.api._metadata.stac_version} ${this.api._metadata.geovisio_version?"& GeoVisio "+this.api._metadata.geovisio_version:""}\n ${nt}\n ${ue}\n`.trim())})).catch((ae=>this.loader.dismiss(ae,this._t.pnx.error_api))).finally((()=>delete this._loadsAPI))}catch(nt){var ue;delete this._loadsAPI,null!==(ue=this.loader)&&void 0!==ue&&ue.dismiss?this.loader.dismiss(nt,this._t.pnx.error_api):console.error(nt)}}onceReady(){throw new Error("You must override this method on sub-class")}onceAPIReady(){return this.api?this.api.onceReady():new Promise((ae=>setTimeout(ae,100))).then(this.onceAPIReady.bind(this))}createRenderRoot(){return this}attributeChangedCallback(ae,ue,nt){if(super.attributeChangedCallback(ae,ue,nt),"endpoint"===ae&&(this._loadsAPI&&nt&&this._loadsAPI===nt||this.api&&this.api._endpoint===nt||!nt||((this._loadsAPI||this.api)&&(delete this.api,delete this._loadsAPI),this._setupAPI())),["picture","sequence"].includes(ae)){let ut,qt,Yt,Xt;"picture"===ae?(ut=this.sequence,Yt=this.sequence,qt=nt,Xt=ue):(ut=nt,Yt=ue,qt=this.picture,Xt=this.picture),this.dispatchEvent(new CustomEvent("select",{bubbles:!0,composed:!0,detail:{seqId:ut,picId:qt,prevSeqId:Yt,prevPicId:Xt}}))}}getClassName(){return"Basic"}select(){let ae=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,ue=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;arguments.length>2&&void 0!==arguments[2]&&arguments[2]&&(this.picture=null,this.sequence=null),this.picture=ue,this.sequence=ae}isWidthSmall(){return(null===this||void 0===this?void 0:this.offsetWidth)<576}isHeightSmall(){return(null===this||void 0===this?void 0:this.offsetHeight)<400}render(){return ut.qy`<p>Should not be used directly, use Viewer/CoverageMap/Editor instead</p>`}getSubComponentsNames(){return["loader","api"]}addEventListener(ae,ue,nt){let ut=ae.split(":").shift();if(ut&&this.getSubComponentsNames().includes(ut)){var qt;const Yt=ae.substring(ut.length+1);null!==(qt=this[ut])&&void 0!==qt&&qt.addEventListener?this[ut].addEventListener(Yt,ue,nt):setTimeout((()=>this.addEventListener(ae,ue,nt)),50)}else super.addEventListener(ae,ue,nt)}static GetJSONConverter(){return{fromAttribute:ae=>null===ae||""===ae?null:"object"===typeof ae||Array.isArray(ae)?ae:uu().parse(ae),toAttribute:ae=>null===ae||""===ae?"":"string"===typeof ae?ae:uu().stringify(ae)}}}Basic.properties={picture:{type:String,reflect:!0},sequence:{type:String,reflect:!0},"fetch-options":{converter:Basic.GetJSONConverter()},users:{type:Array,reflect:!0},"map-style":{type:String},lang:{type:String},endpoint:{type:String}}},153:(ae,ue,nt)=>{"use strict";nt.d(ue,{A:()=>CoverageMap});var ut=nt(9039),qt=nt(5642),Yt=nt(8340),Xt=nt(927),ys=(nt(7776),nt(2118));class CoverageMap extends ut.A{constructor(){super(),this._mapContainer=document.createElement("div"),this.onceAPIReady().then((()=>{this.loader.setAttribute("value",30),this._initParams=new ys.Ay(ys.Ay.GetComponentProperties(CoverageMap,this)),this._initMap()}))}disconnectedCallback(){var ae;super.disconnectedCallback(),null===(ae=this.map)||void 0===ae||ae.destroy()}getClassName(){return"CoverageMap"}onceReady(){return this.map&&this.map.waitForEnoughMapLoaded?this.map.waitForEnoughMapLoaded():new Promise((ae=>setTimeout(ae,100))).then(this.onceReady.bind(this))}render(){return[this.loader,this._mapContainer]}getSubComponentsNames(){const ae=super.getSubComponentsNames();return ae.push("map"),ae}_initMap(){class MyMap extends qt.A{_getLayerStyleProperties(ae){return"pictures_symbols"===ae?{layout:{visibility:"none"}}:super._getLayerStyleProperties(ae)}}this.map=new MyMap(this,this._mapContainer,Object.assign({},this._initParams.getMapInit(),{hash:!0})),this.map.addControl(new Xt.NavigationControl({showCompass:!1})),this.loader.setAttribute("value",70),this.addEventListener("select",this._onSelect.bind(this)),this.map.on("picture-click",(ae=>this.select(ae.seqId,ae.picId))),this.map.on("sequence-click",(ae=>this.select(ae.seqId))),this.map.waitForEnoughMapLoaded().then((async()=>{await(0,ys.mK)(this.map,this._initParams.getMapPostInit()),this.map.reloadLayersStyles(),this.loader.dismiss()}))}_onSelect(ae){if(ae.detail.picId||ae.detail.seqId){const ue=ae.detail.picId?"pictures":"sequences",nt=this.map.queryRenderedFeatures({layers:[...this.map._userLayers].map((ae=>(0,Yt.getUserLayerId)(ae,ue))),filter:["==",["get","id"],ae.detail.picId||ae.detail.seqId]});nt.length>=0&&null!=nt[0]&&this.map._attachPreviewToPictures({features:nt},ue)}}}CoverageMap.properties={"map-options":{converter:ut.A.GetJSONConverter()},...ut.A.properties},customElements.define("pnx-coverage-map",CoverageMap)},1752:(ae,ue,nt)=>{"use strict";nt.d(ue,{A:()=>Editor});nt(7365);var ut=nt(9039),qt=nt(5642),Yt=nt(9048),Xt=nt(508),ys=nt(8340),Ec=nt(1545),lu=nt(5995);const uu="sequence-headings";class Editor extends ut.A{constructor(){super(),this.raster=null,this.background="streets",this.users=[],this._psvContainer=document.createElement("div"),this._psvContainer.setAttribute("slot","bg"),this._mapContainer=document.createElement("div"),this._mapContainer.setAttribute("slot","bg"),this.grid=(0,lu.createWebComp)("pnx-cornered-grid"),this.grid.appendChild(this._psvContainer),this.grid.appendChild(this._mapContainer),this.onceAPIReady().then((()=>{this.loader.setAttribute("value",30),this.sequence||this.loader.dismiss({},"No sequence is selected"),this.addEventListener("select",this._onSelect.bind(this)),this._initPSV(),this._initMap()}))}disconnectedCallback(){var ae,ue;super.disconnectedCallback(),null===(ae=this.map)||void 0===ae||ae.destroy(),null===(ue=this.psv)||void 0===ue||ue.destroy()}getClassName(){return"Editor"}onceReady(){var ae,ue;return this.map&&this.psv&&null!==(ae=(ue=this.map).loaded)&&void 0!==ae&&ae.call(ue)?Promise.resolve():new Promise((ae=>setTimeout(ae,100))).then(this.onceReady.bind(this))}connectedCallback(){Array.isArray(this.users)&&this.users.length>0&&(console.warn("Parameters users can't be changed in Editor, only selected sequence can be visible"),this.users=[]),super.connectedCallback(),this._moveChildToGrid(),window.addEventListener("DOMContentLoaded",(()=>{this._moveChildToGrid()}),{once:!0})}attributeChangedCallback(ae,ue,nt){"users"===ae&&Array.isArray(nt)&&nt.length>0?console.warn("Parameters users can't be changed in Editor, only selected sequence can be visible"):super.attributeChangedCallback(ae,ue,nt)}render(){return[this.loader,this.grid]}getSubComponentsNames(){return super.getSubComponentsNames().concat(["map","psv","grid"])}_initPSV(){try{this.psv=new Yt.Ay(this,this._psvContainer),this.psv._myVTour.datasource.nodeResolver=this._getNode.bind(this)}catch(ae){let ue=Ec.IJ.isWebGLSupported?this._t.pnx.error_psv:this._t.pnx.error_webgl;this.loader.dismiss(ae,ue)}}_initMap(){try{this.map=new qt.A(this,this._mapContainer,{raster:this.raster,background:this.background,supplementaryStyle:this._createMapStyle(),zoom:15,picMarkerDraggable:!0}),(0,ys.linkMapAndPhoto)(this),this.loader.setAttribute("value",50),this._loadSequence(),this.map.once("load",(()=>{this.map.hasTwoBackgrounds()&&this._addMapBackgroundWidget(),this._bindPicturesEvents()}));const ae=this.map._picMarker.setRotation.bind(this.map._picMarker);this.map._picMarker.setRotation=ue=>(ue=void 0===this._lastRelHeading?ue:ue+this._lastRelHeading-this.psv.getPictureRelativeHeading(),ae(ue))}catch(ae){this.loader.dismiss(ae,this._t.pnx.error_psv)}}_createMapStyle(){return{sources:{geovisio_editor_sequences:{type:"geojson",data:{type:"FeatureCollection",features:[]}}},layers:[{id:"geovisio_editor_sequences",type:"line",source:"geovisio_editor_sequences",layout:{...ys.VECTOR_STYLES.SEQUENCES.layout},paint:{...ys.VECTOR_STYLES.SEQUENCES.paint}},{id:"geovisio_editor_pictures",type:"circle",source:"geovisio_editor_sequences",layout:{...ys.VECTOR_STYLES.PICTURES.layout},paint:{...ys.VECTOR_STYLES.PICTURES.paint}}]}}_bindPicturesEvents(){this.map.on("mousemove","geovisio_editor_pictures",(()=>{this.map.getCanvas().style.cursor="pointer"})),this.map.on("mouseleave","geovisio_editor_pictures",(()=>{this.map.getCanvas().style.cursor=""})),this.map.on("click","geovisio_editor_pictures",this.map._onPictureClick.bind(this.map))}_loadSequence(){return this.loader.setAttribute("value",60),this.api.getSequenceItems(this.sequence).then((ae=>{if(this.loader.setAttribute("value",80),this.map.once("sourcedata",(()=>{this.map.setPaintProperty("geovisio_editor_sequences","line-color",this.map._getLayerColorStyle("sequences")),this.map.setPaintProperty("geovisio_editor_pictures","circle-color",this.map._getLayerColorStyle("pictures")),this.map.setLayoutProperty("geovisio_editor_sequences","visibility","visible"),this.map.setLayoutProperty("geovisio_editor_pictures","visibility","visible"),this.map.once("styledata",(()=>this.loader.dismiss()))})),this._sequenceData=ae.features,this.map.getSource("geovisio_editor_sequences").setData({type:"FeatureCollection",features:[{id:this.sequence,type:"Feature",properties:{id:this.sequence},geometry:{type:"LineString",coordinates:ae.features.map((ae=>ae.geometry.coordinates))}},...ae.features.map((ae=>(ae.properties.id=ae.id,ae.properties.sequences=[this.sequence],ae)))]}),this.picture){const ue=ae.features.find((ae=>ae.id===this.picture));ue?(this.select(this.sequence,this.picture,!0),this.map.jumpTo({center:ue.geometry.coordinates,zoom:18})):console.log("Picture with ID",ue,"was not found")}else{const ue=[...ae.features[0].geometry.coordinates,...ae.features[0].geometry.coordinates];for(let nt=1;nt<ae.features.length;nt++){const ut=ae.features[nt].geometry.coordinates;ut[0]<ue[0]&&(ue[0]=ut[0]),ut[1]<ue[1]&&(ue[1]=ut[1]),ut[0]>ue[2]&&(ue[2]=ut[0]),ut[1]>ue[3]&&(ue[3]=ut[1])}this.map.fitBounds(ue,{animate:!1})}})).catch((ae=>this.loader.dismiss(ae,this._t.pnx.error_api)))}_getNode(ae){const ue=this._sequenceData.find((ue=>ue.properties.id===ae)),nt=ue?(0,Xt.apiFeatureToPSVNode)(ue,this._t,this._isInternetFast,void 0,(ae=>this.api.cleanResourceURL(ae))):null;return nt&&delete nt.links,nt}_addMapBackgroundWidget(){const ae=(0,lu.createWebComp)("pnx-map-background",{_parent:this,size:"sm",slot:"bottom-left"});this.grid.appendChild(ae)}_moveChildToGrid(){Array.from(this.querySelectorAll("[slot]")).forEach((ae=>{var ue;null!==(ue=ae.tagName)&&void 0!==ue&&ue.toLowerCase().startsWith("pnx-")&&(ae._parent=this,ae._t=this._t),this.grid.appendChild(ae)}))}previewSequenceHeadingChange(ae){const ue=void 0!==this.map.getLayer(uu);if(this.map._picMarkerPreview.remove(),void 0===ae)return delete this._lastRelHeading,ue&&this.map.setLayoutProperty(uu,"visibility","none"),void(this.picture&&this.map._picMarker.setRotation(this.psv.getXY().x));this._lastRelHeading=ae,ue||this.map.addLayer({id:uu,type:"symbol",source:"geovisio_editor_sequences",layout:{"icon-image":"pnx-marker","icon-overlap":"always","icon-size":.8}});const nt=-this.psv.getPictureRelativeHeading();this.map.setLayoutProperty(uu,"visibility","visible"),this.map.setLayoutProperty(uu,"icon-rotate",["+",["get","view:azimuth"],nt,ae]);const ut=[["==",["geometry-type"],"Point"]];this.picture&&ut.push(["!=",["get","id"],this.picture]),this.map.setFilter(uu,["all",...ut]),this.picture&&this.map._picMarker.setRotation(this.psv.getXY().x)}_onSelect(){void 0!==this._lastRelHeading&&this.previewSequenceHeadingChange(this._lastRelHeading)}}Editor.properties={raster:{converter:ut.A.GetJSONConverter()},background:{type:String},...ut.A.properties},customElements.define("pnx-editor",Editor)},3407:(ae,ue,nt)=>{"use strict";nt.d(ue,{$p:()=>_u,Ay:()=>PhotoViewer,RD:()=>wu});nt(970);var ut=nt(1545),qt=nt(4451),Yt=nt(9039),Xt=nt(9048),ys=nt(5995),Ec=nt(7343),lu=nt(2118),uu=nt(4207);const _u=20,vu=Math.PI/6,wu=["pnx-mini","pnx-widget-player","pnx-widget-zoom"];class PhotoViewer extends Yt.A{constructor(){super(),this["psv-options"]={},this["url-parameters"]=this.getAttribute("url-parameters")||!0,this["keyboard-shortcuts"]=this.getAttribute("keyboard-shortcuts")||!0,this.widgets=this.getAttribute("widgets")||"true",this.grid=(0,ys.createWebComp)("pnx-cornered-grid"),this.psvContainer=document.createElement("div"),this.psvContainer.setAttribute("slot","bg"),this.grid.appendChild(this.psvContainer),this.popup=(0,ys.createWebComp)("pnx-popup",{_parent:this,onclose:this._onPopupClose.bind(this)}),this.tabindex=0,this._sequencesMetadata={}}_createInitParamsHandler(){var ae,ue;this._initParams=new lu.Ay(lu.Ay.GetComponentProperties(PhotoViewer,this),Object.assign({},null===(ae=this.urlHandler)||void 0===ae?void 0:ae.currentURLParams(),null===(ue=this.urlHandler)||void 0===ue?void 0:ue.currentURLParams(!0)),{disableAnnotations:localStorage.getItem(Ec.DISABLE_ANNOTATIONS_PARAM)})}_initWidgets(){"false"!==this._initParams.getParentPostInit().widgets&&((0,Ec.isInIframe)()||(this.grid.appendChild((0,ys.createWebComp)("pnx-widget-player",{slot:"top",_parent:this,class:"pnx-only-psv pnx-print-hidden",size:this.isHeightSmall()?"md":"xl"})),this.grid.appendChild((0,ys.createWebComp)("pnx-annotations-switch",{slot:"top",_parent:this,class:"pnx-only-psv pnx-print-hidden",size:this.isHeightSmall()?"md":"xl"}))),(0,Ec.isInIframe)()?(this.legend=(0,ys.createWebComp)("pnx-widget-legend",{slot:"bottom-right",light:!0,_parent:this,focus:this._initParams.getParentPostInit().focus,picture:this._initParams.getParentPostInit().picture}),this.grid.appendChild(this.legend)):this.isWidthSmall()?(this.legend=(0,ys.createWebComp)("pnx-picture-legend",{_parent:this}),this.bottomDrawer=(0,ys.createWebComp)("pnx-bottom-drawer",{slot:"bottom",_parent:this,class:this._initParams.getParentPostInit().willLoadPicture?void 0:"pnx-hidden"}),this.bottomDrawer.appendChild(this.legend),this.grid.appendChild(this.bottomDrawer),this.addEventListener("select",(ae=>{(0,Ec.isNullId)(ae.detail.picId)?this.bottomDrawer.classList.add("pnx-hidden"):this.bottomDrawer.classList.remove("pnx-hidden")}))):(this.legend=(0,ys.createWebComp)("pnx-widget-legend",{slot:this.isWidthSmall()?void 0:"top-left",_parent:this,focus:this._initParams.getParentPostInit().focus,picture:this._initParams.getParentPostInit().picture}),this.grid.appendChild((0,ys.createWebComp)("pnx-widget-zoom",{slot:"bottom-right",class:"pnx-print-hidden",_parent:this})),this.grid.appendChild(this.legend)))}connectedCallback(){super.connectedCallback(),this.presetsManager=new uu.A(this.lang),this["url-parameters"]&&"false"!==this["url-parameters"]&&(this.urlHandler=new qt.A(this),this.onceReady().then((()=>{this.urlHandler.listenToChanges(),this.urlHandler._onParentChange()}))),this.onceAPIReady().then(this._postAPIInit.bind(this)),this._moveChildToGrid(),window.addEventListener("DOMContentLoaded",(()=>{this._moveChildToGrid()}),{once:!0})}disconnectedCallback(){var ae,ue;super.disconnectedCallback(),null===(ae=this.urlHandler)||void 0===ae||ae.destroy(),null===(ue=this.psv)||void 0===ue||ue.destroy(),document.body.removeEventListener("click",this._toggleKeyboardBasedOnFocus),window.removeEventListener("keypress",this._toggleKeyboardBasedOnFocus)}getClassName(){return"PhotoViewer"}onceReady(){return this.oncePSVReady().then((()=>this._initParams.getParentPostInit().willLoadPicture&&!this.psv.getPictureMetadata()?this.onceFirstPicLoaded():Promise.resolve()))}render(){return[this.loader,this.grid,this.popup]}getSubComponentsNames(){return super.getSubComponentsNames().concat(["psv","grid","popup","urlHandler"])}oncePSVReady(){let ae;return new Promise((ue=>{ae=setInterval((()=>{this.psv&&"object"===typeof this.psv&&(this.psv.container?(clearInterval(ae),ue()):this.psv.addEventListener&&this.psv.addEventListener("ready",(()=>{clearInterval(ae),ue()}),{once:!0}))}),250)}))}onceFirstPicLoaded(){return this.oncePSVReady().then((()=>this.psv.getPictureMetadata()?Promise.resolve():new Promise((ae=>{this.psv.addEventListener("picture-loaded",ae,{once:!0})}))))}async _postAPIInit(){this.loader.setAttribute("value",30),this._createInitParamsHandler();const ae=this._initParams.getParentPostInit();this._initPSV(),this._initWidgets(),(0,lu.ai)(this,ae),ae.keyboardShortcuts&&this._handleKeyboardManagement(),ae.willLoadPicture?this.psv.getPictureMetadata()?this.loader.dismiss():this.psv.addEventListener("picture-loaded",(()=>this.loader.dismiss()),{once:!0}):this.loader.dismiss()}_initPSV(){try{this.psv=new Xt.Ay(this,this.psvContainer,{shouldGoFast:this._psvShouldGoFast.bind(this),keyboard:"always",keyboardActions:{...ut.zY.keyboardActions,8:"ROTATE_UP",2:"ROTATE_DOWN",4:"ROTATE_LEFT",6:"ROTATE_RIGHT",PageUp:()=>this.psv.goToNextPicture(),9:()=>this.psv.goToNextPicture(),PageDown:()=>this.psv.goToPrevPicture(),3:()=>this.psv.goToPrevPicture(),5:()=>this.moveCenter(),"*":()=>this.moveCenter(),Home:()=>{var ae;return null===(ae=this._toggleFocus)||void 0===ae?void 0:ae.call(this)},7:()=>{var ae;return null===(ae=this._toggleFocus)||void 0===ae?void 0:ae.call(this)},End:()=>this.mini.toggleAttribute("collapsed"),1:()=>this.mini.toggleAttribute("collapsed")," ":()=>this.psv.toggleSequencePlaying(),0:()=>this.psv.toggleSequencePlaying()},...this._initParams.getPSVInit()}),this.oncePSVReady().then((()=>{this.loader.setAttribute("value",50),(0,lu.Vy)(this.psv,this._initParams.getPSVPostInit())})),this.psv.addEventListener("sequence-playing",(()=>this.classList.add("pnx-playing"))),this.psv.addEventListener("sequence-stopped",(()=>this.classList.remove("pnx-playing")))}catch(ae){let ue=ut.IJ.isWebGLSupported?this._t.pnx.error_psv:this._t.pnx.error_webgl;this.loader.dismiss(ae,ue)}}_enableKeyboard(){this.psv.startKeyboardControl()}_disableKeyboard(){this.psv.stopKeyboardControl()}_toggleKeyboardBasedOnFocus(ae){const ue=(null===ae||void 0===ae?void 0:ae.target)||document.activeElement;if(this.contains(ue)){for(let ae of this.grid.childNodes)if("bg"!==ae.getAttribute("slot")&&!wu.includes(ae.tagName.toLowerCase())&&ae.contains(ue))return void this._disableKeyboard();this._enableKeyboard()}else this._disableKeyboard()}_handleKeyboardManagement(){window.addEventListener("click",(ae=>this._toggleKeyboardBasedOnFocus(ae))),window.addEventListener("keypress",this._toggleKeyboardBasedOnFocus.bind(this)),this.popup.addEventListener("open",this._disableKeyboard.bind(this)),this.popup.addEventListener("close",this._enableKeyboard.bind(this)),this.psv.addEventListener("click",this._enableKeyboard.bind(this));for(let ae of this.grid.childNodes)"bg"===ae.getAttribute("slot")||wu.includes(ae.tagName.toLowerCase())||(ae.addEventListener("focusin",this._disableKeyboard.bind(this)),ae.addEventListener("focusout",(()=>{null===this.popup.getAttribute("visible")&&this._enableKeyboard()})))}_psvShouldGoFast(){return this.psv._sequencePlaying&&this.psv.getTransitionDuration()<1e3}_moveChildToGrid(){Array.from(this.querySelectorAll("[slot]")).forEach((ae=>{var ue;null!==(ue=ae.tagName)&&void 0!==ue&&ue.toLowerCase().startsWith("pnx-")&&(ae._parent=this,ae._t=this._t),"editors"===ae.getAttribute("slot")?this.onceReady().then((()=>{var ue;return null===(ue=this.legend)||void 0===ue?void 0:ue.appendChild(ae)})):this.grid.appendChild(ae)}))}setPopup(ae){let ue=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;ae?this.popup.setAttribute("visible",""):this.popup.removeAttribute("visible"),this.popup.innerHTML="","string"===typeof ue?this.popup.innerHTML=ue:Array.isArray(ue)&&ue.forEach((ae=>this.popup.appendChild(ae)))}_onPopupClose(){this.dispatchEvent(new CustomEvent("focus-changed",{detail:{focus:this.map&&this.isMapWide()?"map":"pic"}}))}_showQualityScoreDoc(){this.setPopup(!0,[(0,ys.createWebComp)("pnx-quality-score-doc",{_t:this._t})])}_showReportForm(){if(!this.psv.getPictureMetadata())throw new Error("No picture currently selected");this.setPopup(!0,[(0,ys.createWebComp)("pnx-report-form",{_parent:this})])}_showShareOptions(){this.setPopup(!0,[(0,ys.createWebComp)("pnx-share-menu",{_parent:this})])}_showSemanticsDoc(){this.setPopup(!0,[(0,ys.createWebComp)("pnx-semantics-doc",{_t:this._t})])}moveCenter(){this.psv.getPictureMetadata()&&this._psvAnimate({speed:Xt.LM,yaw:0,pitch:0,zoom:Xt.cS})}moveLeft(){this._moveToDirection("left")}moveRight(){this._moveToDirection("right")}moveUp(){this._moveToDirection("up")}moveDown(){this._moveToDirection("down")}_moveToDirection(ae){let ue=this.psv.getPosition();switch(ae){case"up":ue.pitch+=vu;break;case"left":ue.yaw-=vu;break;case"down":ue.pitch-=vu;break;case"right":ue.yaw+=vu}this._psvAnimate({speed:Xt.LM,...ue})}_psvAnimate(ae){this._lastPsvAnim&&this._lastPsvAnim.cancel(),this._lastPsvAnim=this.psv.animate(ae)}addEventListener(ae,ue,nt){super.addEventListener(ae,ue,nt)}}PhotoViewer.properties={"psv-options":{converter:Yt.A.GetJSONConverter()},widgets:{type:String},"url-parameters":{type:String},"keyboard-shortcuts":{type:String},tabindex:{type:Number},...Yt.A.properties},customElements.define("pnx-photo-viewer",PhotoViewer)},8743:(ae,ue,nt)=>{"use strict";nt.d(ue,{A:()=>Viewer});nt(9616);var ut=nt(8340),qt=nt(3407),Yt=nt(2771),Xt=nt(7343),ys=nt(5995),Ec=nt(9683),lu=nt(2e3),uu=nt(9438),_u=nt(2118);const vu=100;class Viewer extends qt.Ay{constructor(){super(),this["map-options"]=!0,this.geocoder=this.getAttribute("geocoder")||"nominatim",this.mini=(0,ys.createWebComp)("pnx-mini",{slot:"bottom-left",_parent:this,onexpand:this._onMiniExpand.bind(this),collapsed:!!(0,Xt.isNullId)(this.picture)||void 0}),this.mini.addEventListener("expand",this._toggleFocus.bind(this)),this.grid.appendChild(this.mini),this.mapContainer=document.createElement("div"),this.tabindex=0}_createInitParamsHandler(){var ae,ue;this._initParams=new _u.Ay(_u.Ay.GetComponentProperties(Viewer,this),Object.assign({},null===(ae=this.urlHandler)||void 0===ae?void 0:ae.currentURLParams(),null===(ue=this.urlHandler)||void 0===ue?void 0:ue.currentURLParams(!0)),{map:(0,ut.getMapParamsFromLocalStorage)(),disableAnnotations:localStorage.getItem(Xt.DISABLE_ANNOTATIONS_PARAM)})}_initWidgets(){var ae,ue;"false"!==this._initParams.getParentPostInit().widgets&&(this.grid.appendChild((0,ys.createWebComp)("pnx-widget-zoom",{slot:this.isWidthSmall()?"top-left":"bottom-right",class:this.isWidthSmall()?"pnx-only-map pnx-print-hidden":"pnx-print-hidden",_parent:this})),(0,Xt.isInIframe)()?(this.legend=(0,ys.createWebComp)("pnx-widget-legend",{slot:"bottom-right",light:!0,_parent:this,focus:this._initParams.getParentPostInit().focus,picture:this._initParams.getParentPostInit().picture}),this.grid.appendChild(this.legend)):this.isWidthSmall()?(this.legend=(0,ys.createWebComp)("pnx-picture-legend",{_parent:this}),this.bottomDrawer=(0,ys.createWebComp)("pnx-bottom-drawer",{slot:"bottom",_parent:this,class:this._initParams.getParentPostInit().willLoadPicture?void 0:"pnx-hidden"}),this.bottomDrawer.appendChild(this.legend),this.grid.appendChild(this.bottomDrawer),this.addEventListener("select",(ae=>{(0,Xt.isNullId)(ae.detail.picId)?this.bottomDrawer.classList.add("pnx-hidden"):this.bottomDrawer.classList.remove("pnx-hidden")}))):(this.legend=(0,ys.createWebComp)("pnx-widget-legend",{slot:this.isWidthSmall()?"top":"top-left",_parent:this,focus:this._initParams.getParentPostInit().focus,picture:this._initParams.getParentPostInit().picture}),this._miniPicLegend=(0,ys.createWebComp)("pnx-mini-picture-legend",{_parent:this}),this.grid.appendChild(this.legend)),(0,Xt.isInIframe)()||(this.grid.appendChild((0,ys.createWebComp)("pnx-widget-player",{slot:"top",_parent:this,class:"pnx-only-psv pnx-print-hidden",size:this.isHeightSmall()?"md":"xl"})),this.grid.appendChild((0,ys.createWebComp)("pnx-annotations-switch",{slot:"top",_parent:this,class:"pnx-only-psv pnx-print-hidden",size:this.isHeightSmall()?"md":"xl"})),this.grid.appendChild((0,ys.createWebComp)("pnx-widget-geosearch",{slot:this.isWidthSmall()?"top-right":"top-left",_parent:this,class:"pnx-only-map pnx-print-hidden",geocoder:this._initParams.getParentPostInit().geocoder})),this.grid.appendChild((0,ys.createWebComp)("pnx-widget-mapfilters",{slot:this.isWidthSmall()?"top-right":"top-left",_parent:this,"user-search":null!==this.api._endpoints.user_search&&null!==this.api._endpoints.user_tiles,"quality-score":(null===(ae=this.map)||void 0===ae||null===(ue=ae._hasQualityScore)||void 0===ue?void 0:ue.call(ae))||!1,class:"pnx-only-map pnx-print-hidden"})),this.grid.appendChild((0,ys.createWebComp)("pnx-widget-maplayers",{slot:"top-right",_parent:this,class:"pnx-only-map pnx-print-hidden"}))))}disconnectedCallback(){var ae;super.disconnectedCallback(),null===(ae=this.map)||void 0===ae||ae.destroy()}getClassName(){return"Viewer"}getSubComponentsNames(){return super.getSubComponentsNames().concat(["mini","map"])}onceReady(){return Promise.all([this.oncePSVReady(),this.onceMapReady()]).then((()=>this._initParams.getParentPostInit().willLoadPicture&&!this.psv.getPictureMetadata()?this.onceFirstPicLoaded():Promise.resolve()))}attributeChangedCallback(ae,ue,nt){var ut,qt;if(super.attributeChangedCallback(ae,ue,nt),"picture"===ae)if(null===(ut=this.legend)||void 0===ut||null===(qt=ut.setAttribute)||void 0===qt||qt.call(ut,"picture",nt),(0,Xt.isNullId)(ue)&&!(0,Xt.isNullId)(nt)&&this.mini.removeAttribute("collapsed"),(0,Xt.isNullId)(nt))this.map&&this.isMapWide()?this.mini.classList.add("pnx-hidden"):this.map&&!this.isMapWide()&&this._setFocus("map");else if((0,Xt.isNullId)(ue)&&this.sequence==this._initParams.getParentPostInit().sequence&&!this._initParams.getParentPostInit().picture){var Yt,ys;this.mini.classList.remove("pnx-hidden"),this.mini.removeAttribute("collapsed"),"closed"===(null===(Yt=this.bottomDrawer)||void 0===Yt||null===(ys=Yt.getAttribute)||void 0===ys?void 0:ys.call(Yt,"openness"))&&this.bottomDrawer.setAttribute("openness","half-opened")}else{var Ec,lu;if(this.mini.classList.remove("pnx-hidden"),(0,Xt.isNullId)(ue))this._setFocus("pic"),"closed"===(null===(Ec=this.bottomDrawer)||void 0===Ec||null===(lu=Ec.getAttribute)||void 0===lu?void 0:lu.call(Ec,"openness"))&&this.bottomDrawer.setAttribute("openness","half-opened")}"focus"===ae&&this._setFocus(nt)}onceMapReady(){if(!this.map)return Promise.resolve();let ae;return new Promise((ue=>{ae=setInterval((()=>{var nt,ut,qt;"object"===typeof this.map&&(null!==(nt=this.map)&&void 0!==nt&&null!==(ut=nt.loaded)&&void 0!==ut&&ut.call(nt)?(clearInterval(ae),ue()):null!==(qt=this.map)&&void 0!==qt&&qt.once&&this.map.once("render",(()=>{clearInterval(ae),ue()})))}),250)}))}async _initMap(){await new Promise((ae=>{this.map=new Yt.A(this,this.mapContainer,this._initParams.getMapInit()),(0,ut.saveMapParamsToLocalStorage)(this.map),this.map.once("users-changed",(()=>{this.loader.setAttribute("value",75),ae()}))})),await(0,_u.mK)(this.map,this._initParams.getMapPostInit()),(0,ut.initMapKeyboardHandler)(this),(0,ut.linkMapAndPhoto)(this)}async _postAPIInit(){this.loader.setAttribute("value",30),this._createInitParamsHandler();const ae=this._initParams.getParentPostInit();this._initPSV(),await this._initMap(),this._initWidgets(),this._moveChildToGrid(),(0,_u.iz)(this,ae),ae.keyboardShortcuts&&this._handleKeyboardManagement(),ae.willLoadPicture?this.psv.addEventListener("picture-loaded",(ue=>{(0,_u.iz)(this,ae),this.loader.dismiss()}),{once:!0}):this.loader.dismiss()}_enableKeyboard(){this.map&&this.isMapWide()?this._enableKeyboardMap():this._enableKeyboardPSV()}_enableKeyboardMap(){this.psv.stopKeyboardControl(),this.map.keyboard.enable()}_enableKeyboardPSV(){this.psv.startKeyboardControl(),this.map.keyboard.disable()}_disableKeyboard(){this.psv.stopKeyboardControl(),this.map.keyboard.disable()}_toggleKeyboardBasedOnFocus(ae){const ue=(null===ae||void 0===ae?void 0:ae.target)||document.activeElement;if(this.contains(ue)){for(let ae of this.grid.childNodes)if("bg"!==ae.getAttribute("slot")&&!qt.RD.includes(ae.tagName.toLowerCase())&&ae.contains(ue))return void this._disableKeyboard();this._enableKeyboard()}else this._disableKeyboard()}_handleKeyboardManagement(){window.addEventListener("click",(ae=>this._toggleKeyboardBasedOnFocus(ae))),window.addEventListener("keypress",this._toggleKeyboardBasedOnFocus.bind(this)),this.addEventListener("focus-changed",(ae=>{this.popup.getAttribute("visible")?this._disableKeyboard():"map"===ae.detail.focus?this._enableKeyboardMap():this._enableKeyboardPSV()})),this.popup.addEventListener("open",this._disableKeyboard.bind(this)),this.popup.addEventListener("close",this._enableKeyboard.bind(this)),this.psv.addEventListener("click",this._enableKeyboardPSV.bind(this));for(let ae of this.grid.childNodes)"bg"===ae.getAttribute("slot")||qt.RD.includes(ae.tagName.toLowerCase())||(ae.addEventListener("focusin",this._disableKeyboard.bind(this)),ae.addEventListener("focusout",(()=>{null===this.popup.getAttribute("visible")&&this._enableKeyboard()})))}moveCenter(){const ae=this.psv.getPictureMetadata();ae&&(this.map&&this.isMapWide()?this.map.flyTo({center:ae.gps,zoom:20}):super.moveCenter())}_moveToDirection(ae){if(this.map&&this.isMapWide()){let ue;switch(ae){case"up":ue=[0,-100];break;case"left":ue=[-100,0];break;case"down":ue=[0,vu];break;case"right":ue=[vu,0]}this.map.panBy(ue)}else super._moveToDirection(ae)}isMapWide(){return this.mapContainer.parentNode==this.grid}_setFocus(ae){var ue,nt,ut,qt;let Yt=arguments.length>1&&void 0!==arguments[1]&&arguments[1],uu=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if("map"===ae&&!this.map)throw new Error("Map is not enabled");if(!["map","pic"].includes(ae))throw new Error("Invalid focus value (should be pic or map)");if(this.focus=ae,(uu||("map"!==ae||!this.map||!this.isMapWide())&&("pic"!==ae||this.map&&this.isMapWide()))&&("map"===ae?(this.psvContainer.parentNode==this.grid&&(this.grid.removeChild(this.psvContainer),this.psvContainer.removeAttribute("slot")),this.mapContainer.parentNode==this.mini&&this.mini.removeChild(this.mapContainer),this.mapContainer.setAttribute("slot","bg"),this.grid.appendChild(this.mapContainer),this.mini.appendChild(this.psvContainer),this.mini.icon=(0,ys.fa)(Ec.pt),this._miniPicLegend&&this.mini.appendChild(this._miniPicLegend),(0,Xt.isNullId)(this.picture)?this.mini.classList.add("pnx-hidden"):this.mini.classList.remove("pnx-hidden"),this.map.getCanvas().focus()):(this.mapContainer.parentNode==this.grid&&(this.grid.removeChild(this.mapContainer),this.mapContainer.removeAttribute("slot")),this.psvContainer.parentNode==this.mini&&(this.mini.removeChild(this.psvContainer),this._miniPicLegend&&this.mini.removeChild(this._miniPicLegend)),this.psvContainer.setAttribute("slot","bg"),this.grid.appendChild(this.psvContainer),this.mini.classList.remove("pnx-hidden"),this.mini.appendChild(this.mapContainer),this.mini.icon=(0,ys.fa)(lu.e5),this.psvContainer.focus()),null===this||void 0===this||null===(ue=this.map)||void 0===ue||null===(nt=ue.resize)||void 0===nt||nt.call(ue),this.psv.autoSize(),this.psv.forceRefresh(),null===(ut=this.legend)||void 0===ut||null===(qt=ut.setAttribute)||void 0===qt||qt.call(ut,"focus",this.focus),!Yt)){const ue=new CustomEvent("focus-changed",{detail:{focus:ae}});this.dispatchEvent(ue)}}_toggleFocus(){this._setFocus(this.isMapWide()?"pic":"map")}_onMiniExpand(){this.map.resize(),this.psv.autoSize()}_onMapFiltersChange(){var ae;const ue=(0,uu.qi)("#pnx-map-filters-menu"),nt=(0,uu.qi)("#pnx-map-theme"),qt=(0,ut.mapFiltersFormValues)(ue,nt,null===(ae=this.map)||void 0===ae?void 0:ae._hasQualityScore());this.map.setFilters(qt)}}Viewer.properties={"map-options":{converter:qt.Ay.GetJSONConverter()},focus:{type:String,reflect:!0},geocoder:{type:String},tabindex:{type:Number},...qt.Ay.properties},customElements.define("pnx-viewer",Viewer)},3921:(ae,ue,nt)=>{"use strict";nt.r(ue),nt.d(ue,{Basic:()=>ut.A,CoverageMap:()=>qt.A,Editor:()=>Yt.A,PhotoViewer:()=>ys.Ay,Viewer:()=>Xt.A});var ut=nt(9039),qt=nt(153),Yt=nt(1752),Xt=nt(8743),ys=nt(3407)},9341:(ae,ue,nt)=>{"use strict";nt.r(ue),nt.d(ue,{core:()=>ut,layout:()=>qt,menus:()=>Yt,ui:()=>Xt});var ut=nt(3921),qt=nt(456),Yt=nt(8794),Xt=nt(7091)},6784:(ae,ue,nt)=>{"use strict";nt.d(ue,{A:()=>BottomDrawer});var ut=nt(4542),qt=nt(1198),Yt=nt(5995);const Xt={opened:0,"half-opened":.7,closed:1};class BottomDrawer extends ut.WF{constructor(){super(),this._isDragging=!1,this.openness="half-opened"}firstUpdated(){super.firstUpdated(),this._boundTouchMove=this._onTouchMove.bind(this),this._boundTouchEnd=this._onTouchEnd.bind(this),this._drawerHeight=window.innerHeight-30;const ae=this._getDrawer();ae&&(ae.style.height=`${this._drawerHeight}px`,ae.style.maxHeight=`${this._drawerHeight}px`,(0,Yt.onceParentAvailable)(this).then((()=>this._parent.onceReady())).then((()=>{var ae,ue;null===(ae=this._parent.map)||void 0===ae||ae.addEventListener("click",(()=>this.openness="closed")),null===(ue=this._parent.psv)||void 0===ue||ue.addEventListener("click",(()=>this.openness="closed"))})))}attributeChangedCallback(ae,ue,nt){if(super.attributeChangedCallback(ae,ue,nt),"openness"===ae){if("opened"!==nt){const ae=this.shadowRoot.querySelector(".content");ae&&(ae.scrollTop=0)}const ae=this._getDrawer();ae&&(ae.style.transform=null)}}disconnectedCallback(){super.disconnectedCallback(),this._cleanupTouchListeners()}_getDrawer(){var ae;return null===(ae=this.shadowRoot)||void 0===ae?void 0:ae.querySelector(".drawer")}_onHandleClick(){"opened"===this.openness?this.openness="closed":"half-opened"===this.openness?this.openness="opened":"closed"===this.openness&&(this.openness="half-opened")}_onTouchStart(ae){this._isDragging=!0,this._startFingerY=ae.touches[0].clientY,this._deltaFingerY=0,this._drawerY=this._drawerHeight*Xt[this.openness],window.addEventListener("touchmove",this._boundTouchMove,{passive:!0}),window.addEventListener("touchend",this._boundTouchEnd),window.addEventListener("touchcancel",this._boundTouchEnd)}_onTouchMove(ae){if(!this._isDragging)return;const ue=this.shadowRoot.querySelector(".content");ue.scrollHeight>ue.offsetHeight&&ue.scrollTop>0?this._updateDrawerTransform(0):(this._deltaFingerY=ae.touches[0].clientY-this._startFingerY,this._updateDrawerTransform(this._drawerY+this._deltaFingerY))}_onTouchEnd(ae){(this._isDragging&&!(Math.abs(this._deltaFingerY)<30)||ae.target.closest(".handle"))&&(ae.preventDefault(),this._isDragging=!1,0===this._deltaFingerY&&"closed"===this.openness?this.openness="half-opened":this._updateDrawerTransform(this._drawerY+this._deltaFingerY,!0),this._cleanupTouchListeners(),this._startFingerY=null,this._deltaFingerY=null)}_cleanupTouchListeners(){window.removeEventListener("touchmove",this._boundTouchMove),window.removeEventListener("touchend",this._boundTouchEnd),window.removeEventListener("touchcancel",this._boundTouchCancel)}_updateDrawerTransform(ae){let ue=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const nt=this._getDrawer();nt&&(ae=Math.max(0,Math.min(ae,this._drawerHeight-30)),ue&&(this._deltaFingerY<0?"closed"===this.openness?Math.abs(this._deltaFingerY)>this._drawerHeight*(1-Xt["half-opened"])?this.openness="opened":this.openness="half-opened":this.openness="opened":this.openness="closed",this._drawerY=null,ae=Math.max(0,Math.min(Xt[this.openness]*this._drawerHeight,this._drawerHeight-30))),nt.style.transform=`translateY(${ae}px)`)}render(){const ae={drawer:!0,[this.openness]:!0,dragging:this._isDragging};return ut.qy`
12
+ !function(ae,ue){"object"===typeof exports&&"object"===typeof module?module.exports=ue():"function"===typeof define&&define.amd?define("Panoramax",[],ue):"object"===typeof exports?exports.Panoramax=ue():ae.Panoramax=ue()}(this,(()=>(()=>{var ae={9039:(ae,ue,nt)=>{"use strict";nt.d(ue,{A:()=>Basic});var ut=nt(4542),qt=nt(5254),Yt=nt(4964),Xt=nt(7208),ys=nt(5995),Ec=nt(7343),lu=nt(2614),uu=nt.n(lu),_u=nt(8330);nt(1865),nt(3638);class Basic extends ut.WF{constructor(){let ae=arguments.length>0&&void 0!==arguments[0]&&arguments[0];super(),this.users=["geovisio"],this["map-style"]=this.getAttribute("map-style")||(0,Xt.MapTiles)(),this.lang=this.getAttribute("lang")||null,this.endpoint=this.getAttribute("endpoint")||null,this.picture=this.getAttribute("picture")||null,this.sequence=this.getAttribute("sequence")||null,console.info(`\ud83d\udcf7 Panoramax ${this.getClassName()} - Version ${_u.rE} (ace1b4b)\n\n\ud83c\udd98 Issues can be reported at ${_u.Jk.O}`),ae||(this._isInternetFast=null,(0,Ec.isInternetFast)().then((ae=>this._isInternetFast=ae)))}connectedCallback(){super.connectedCallback(),this._t=(0,Yt.getTranslations)(this.lang),this.loader=(0,ys.createWebComp)("pnx-loader",{_parent:this,"no-label":(0,Ec.isInIframe)()}),this._loadsAPI&&this.endpoint&&this._loadsAPI===this.endpoint||this.api&&this.api._endpoint===this.endpoint||!this.endpoint||((this._loadsAPI||this.api)&&(delete this.api,delete this._loadsAPI),this._setupAPI()),Object.entries({map:"map-options",psv:"psv-options",fetchOptions:"fetch-options",mapstyle:"map-style"}).forEach((ae=>{let[ue,nt]=ae;this.getAttribute(ue)&&console.error(`Component attribute "${ue}" has been renamed into "${nt}". Old attribute "${ue}" is ignored.`)}))}_setupAPI(){if(this.loader=this.loader||(0,ys.createWebComp)("pnx-loader",{_parent:this}),!this.endpoint)return void console.warn("No endpoint is defined");this._loadsAPI=this.endpoint;let ae=this.endpoint;try{this["map-style"]=JSON.parse(this["map-style"])}catch(nt){}try{this.api=new qt.A(this.endpoint,{users:this.users,fetch:this["fetch-options"],style:this["map-style"]}),this.api.onceReady().then((()=>{if(ae!=this._loadsAPI||!this.api)return;let ue=this.api.getUnavailableFeatures(),nt=this.api.getAvailableFeatures();nt=0===ue.length?"\u2705 All features available":"\u2705 Available features: "+nt.join(", "),ue=0===ue.length?"":"\ud83d\udeab Unavailable features: "+ue.join(", "),console.info(`\ud83c\udf10 Connected to API "${this.api._metadata.name}" (${this.api._endpoint})\n\u2139\ufe0f API runs STAC ${this.api._metadata.stac_version} ${this.api._metadata.geovisio_version?"& GeoVisio "+this.api._metadata.geovisio_version:""}\n ${nt}\n ${ue}\n`.trim())})).catch((ae=>this.loader.dismiss(ae,this._t.pnx.error_api))).finally((()=>delete this._loadsAPI))}catch(nt){var ue;delete this._loadsAPI,null!==(ue=this.loader)&&void 0!==ue&&ue.dismiss?this.loader.dismiss(nt,this._t.pnx.error_api):console.error(nt)}}onceReady(){throw new Error("You must override this method on sub-class")}onceAPIReady(){return this.api?this.api.onceReady():new Promise((ae=>setTimeout(ae,100))).then(this.onceAPIReady.bind(this))}createRenderRoot(){return this}attributeChangedCallback(ae,ue,nt){if(super.attributeChangedCallback(ae,ue,nt),"endpoint"===ae&&(this._loadsAPI&&nt&&this._loadsAPI===nt||this.api&&this.api._endpoint===nt||!nt||((this._loadsAPI||this.api)&&(delete this.api,delete this._loadsAPI),this._setupAPI())),["picture","sequence"].includes(ae)){let ut,qt,Yt,Xt;"picture"===ae?(ut=this.sequence,Yt=this.sequence,qt=nt,Xt=ue):(ut=nt,Yt=ue,qt=this.picture,Xt=this.picture),this.dispatchEvent(new CustomEvent("select",{bubbles:!0,composed:!0,detail:{seqId:ut,picId:qt,prevSeqId:Yt,prevPicId:Xt}}))}}getClassName(){return"Basic"}select(){let ae=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,ue=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;arguments.length>2&&void 0!==arguments[2]&&arguments[2]&&(this.picture=null,this.sequence=null),this.picture=ue,this.sequence=ae}isWidthSmall(){return(null===this||void 0===this?void 0:this.offsetWidth)<576}isHeightSmall(){return(null===this||void 0===this?void 0:this.offsetHeight)<400}render(){return ut.qy`<p>Should not be used directly, use Viewer/CoverageMap/Editor instead</p>`}getSubComponentsNames(){return["loader","api"]}addEventListener(ae,ue,nt){let ut=ae.split(":").shift();if(ut&&this.getSubComponentsNames().includes(ut)){var qt;const Yt=ae.substring(ut.length+1);null!==(qt=this[ut])&&void 0!==qt&&qt.addEventListener?this[ut].addEventListener(Yt,ue,nt):setTimeout((()=>this.addEventListener(ae,ue,nt)),50)}else super.addEventListener(ae,ue,nt)}static GetJSONConverter(){return{fromAttribute:ae=>null===ae||""===ae?null:"object"===typeof ae||Array.isArray(ae)?ae:uu().parse(ae),toAttribute:ae=>null===ae||""===ae?"":"string"===typeof ae?ae:uu().stringify(ae)}}}Basic.properties={picture:{type:String,reflect:!0},sequence:{type:String,reflect:!0},"fetch-options":{converter:Basic.GetJSONConverter()},users:{type:Array,reflect:!0},"map-style":{type:String},lang:{type:String},endpoint:{type:String}}},153:(ae,ue,nt)=>{"use strict";nt.d(ue,{A:()=>CoverageMap});var ut=nt(9039),qt=nt(5642),Yt=nt(8340),Xt=nt(927),ys=(nt(7776),nt(2118));class CoverageMap extends ut.A{constructor(){super(),this._mapContainer=document.createElement("div"),this.onceAPIReady().then((()=>{this.loader.setAttribute("value",30),this._initParams=new ys.Ay(ys.Ay.GetComponentProperties(CoverageMap,this)),this._initMap()}))}disconnectedCallback(){var ae;super.disconnectedCallback(),null===(ae=this.map)||void 0===ae||ae.destroy()}getClassName(){return"CoverageMap"}onceReady(){return this.map&&this.map.waitForEnoughMapLoaded?this.map.waitForEnoughMapLoaded():new Promise((ae=>setTimeout(ae,100))).then(this.onceReady.bind(this))}render(){return[this.loader,this._mapContainer]}getSubComponentsNames(){const ae=super.getSubComponentsNames();return ae.push("map"),ae}_initMap(){class MyMap extends qt.A{_getLayerStyleProperties(ae){return"pictures_symbols"===ae?{layout:{visibility:"none"}}:super._getLayerStyleProperties(ae)}}this.map=new MyMap(this,this._mapContainer,Object.assign({},this._initParams.getMapInit(),{hash:!0})),this.map.addControl(new Xt.NavigationControl({showCompass:!1})),this.loader.setAttribute("value",70),this.addEventListener("select",this._onSelect.bind(this)),this.map.on("picture-click",(ae=>this.select(ae.seqId,ae.picId))),this.map.on("sequence-click",(ae=>this.select(ae.seqId))),this.map.waitForEnoughMapLoaded().then((async()=>{await(0,ys.mK)(this.map,this._initParams.getMapPostInit()),this.map.reloadLayersStyles(),this.loader.dismiss()}))}_onSelect(ae){if(ae.detail.picId||ae.detail.seqId){const ue=ae.detail.picId?"pictures":"sequences",nt=this.map.queryRenderedFeatures({layers:[...this.map._userLayers].map((ae=>(0,Yt.getUserLayerId)(ae,ue))),filter:["==",["get","id"],ae.detail.picId||ae.detail.seqId]});nt.length>=0&&null!=nt[0]&&this.map._attachPreviewToPictures({features:nt},ue)}}}CoverageMap.properties={"map-options":{converter:ut.A.GetJSONConverter()},...ut.A.properties},customElements.define("pnx-coverage-map",CoverageMap)},1752:(ae,ue,nt)=>{"use strict";nt.d(ue,{A:()=>Editor});nt(7365);var ut=nt(9039),qt=nt(5642),Yt=nt(9048),Xt=nt(508),ys=nt(8340),Ec=nt(1545),lu=nt(5995);const uu="sequence-headings";class Editor extends ut.A{constructor(){super(),this.raster=null,this.background="streets",this.users=[],this._psvContainer=document.createElement("div"),this._psvContainer.setAttribute("slot","bg"),this._mapContainer=document.createElement("div"),this._mapContainer.setAttribute("slot","bg"),this.grid=(0,lu.createWebComp)("pnx-cornered-grid"),this.grid.appendChild(this._psvContainer),this.grid.appendChild(this._mapContainer),this.onceAPIReady().then((()=>{this.loader.setAttribute("value",30),this.sequence||this.loader.dismiss({},"No sequence is selected"),this.addEventListener("select",this._onSelect.bind(this)),this._initPSV(),this._initMap()}))}disconnectedCallback(){var ae,ue;super.disconnectedCallback(),null===(ae=this.map)||void 0===ae||ae.destroy(),null===(ue=this.psv)||void 0===ue||ue.destroy()}getClassName(){return"Editor"}onceReady(){var ae,ue;return this.map&&this.psv&&null!==(ae=(ue=this.map).loaded)&&void 0!==ae&&ae.call(ue)?Promise.resolve():new Promise((ae=>setTimeout(ae,100))).then(this.onceReady.bind(this))}connectedCallback(){Array.isArray(this.users)&&this.users.length>0&&(console.warn("Parameters users can't be changed in Editor, only selected sequence can be visible"),this.users=[]),super.connectedCallback(),this._moveChildToGrid(),window.addEventListener("DOMContentLoaded",(()=>{this._moveChildToGrid()}),{once:!0})}attributeChangedCallback(ae,ue,nt){"users"===ae&&Array.isArray(nt)&&nt.length>0?console.warn("Parameters users can't be changed in Editor, only selected sequence can be visible"):super.attributeChangedCallback(ae,ue,nt)}render(){return[this.loader,this.grid]}getSubComponentsNames(){return super.getSubComponentsNames().concat(["map","psv","grid"])}_initPSV(){try{this.psv=new Yt.Ay(this,this._psvContainer),this.psv._myVTour.datasource.nodeResolver=this._getNode.bind(this)}catch(ae){let ue=Ec.IJ.isWebGLSupported?this._t.pnx.error_psv:this._t.pnx.error_webgl;this.loader.dismiss(ae,ue)}}_initMap(){try{this.map=new qt.A(this,this._mapContainer,{raster:this.raster,background:this.background,supplementaryStyle:this._createMapStyle(),zoom:15,picMarkerDraggable:!0}),(0,ys.linkMapAndPhoto)(this),this.loader.setAttribute("value",50),this._loadSequence(),this.map.once("load",(()=>{this.map.hasTwoBackgrounds()&&this._addMapBackgroundWidget(),this._bindPicturesEvents()}));const ae=this.map._picMarker.setRotation.bind(this.map._picMarker);this.map._picMarker.setRotation=ue=>(ue=void 0===this._lastRelHeading?ue:ue+this._lastRelHeading-this.psv.getPictureRelativeHeading(),ae(ue))}catch(ae){this.loader.dismiss(ae,this._t.pnx.error_psv)}}_createMapStyle(){return{sources:{geovisio_editor_sequences:{type:"geojson",data:{type:"FeatureCollection",features:[]}}},layers:[{id:"geovisio_editor_sequences",type:"line",source:"geovisio_editor_sequences",layout:{...ys.VECTOR_STYLES.SEQUENCES.layout},paint:{...ys.VECTOR_STYLES.SEQUENCES.paint}},{id:"geovisio_editor_pictures",type:"circle",source:"geovisio_editor_sequences",layout:{...ys.VECTOR_STYLES.PICTURES.layout},paint:{...ys.VECTOR_STYLES.PICTURES.paint}}]}}_bindPicturesEvents(){this.map.on("mousemove","geovisio_editor_pictures",(()=>{this.map.getCanvas().style.cursor="pointer"})),this.map.on("mouseleave","geovisio_editor_pictures",(()=>{this.map.getCanvas().style.cursor=""})),this.map.on("click","geovisio_editor_pictures",this.map._onPictureClick.bind(this.map))}_loadSequence(){return this.loader.setAttribute("value",60),this.api.getSequenceItems(this.sequence).then((ae=>{if(this.loader.setAttribute("value",80),this.map.once("sourcedata",(()=>{this.map.setPaintProperty("geovisio_editor_sequences","line-color",this.map._getLayerColorStyle("sequences")),this.map.setPaintProperty("geovisio_editor_pictures","circle-color",this.map._getLayerColorStyle("pictures")),this.map.setLayoutProperty("geovisio_editor_sequences","visibility","visible"),this.map.setLayoutProperty("geovisio_editor_pictures","visibility","visible"),this.map.once("styledata",(()=>this.loader.dismiss()))})),this._sequenceData=ae.features,this.map.getSource("geovisio_editor_sequences").setData({type:"FeatureCollection",features:[{id:this.sequence,type:"Feature",properties:{id:this.sequence},geometry:{type:"LineString",coordinates:ae.features.map((ae=>ae.geometry.coordinates))}},...ae.features.map((ae=>(ae.properties.id=ae.id,ae.properties.sequences=[this.sequence],ae)))]}),this.picture){const ue=ae.features.find((ae=>ae.id===this.picture));ue?(this.select(this.sequence,this.picture,!0),this.map.jumpTo({center:ue.geometry.coordinates,zoom:18})):console.log("Picture with ID",ue,"was not found")}else{const ue=[...ae.features[0].geometry.coordinates,...ae.features[0].geometry.coordinates];for(let nt=1;nt<ae.features.length;nt++){const ut=ae.features[nt].geometry.coordinates;ut[0]<ue[0]&&(ue[0]=ut[0]),ut[1]<ue[1]&&(ue[1]=ut[1]),ut[0]>ue[2]&&(ue[2]=ut[0]),ut[1]>ue[3]&&(ue[3]=ut[1])}this.map.fitBounds(ue,{animate:!1})}})).catch((ae=>this.loader.dismiss(ae,this._t.pnx.error_api)))}_getNode(ae){const ue=this._sequenceData.find((ue=>ue.properties.id===ae)),nt=ue?(0,Xt.apiFeatureToPSVNode)(ue,this._t,this._isInternetFast,void 0,(ae=>this.api.cleanResourceURL(ae))):null;return nt&&delete nt.links,nt}_addMapBackgroundWidget(){const ae=(0,lu.createWebComp)("pnx-map-background",{_parent:this,size:"sm",slot:"bottom-left"});this.grid.appendChild(ae)}_moveChildToGrid(){Array.from(this.querySelectorAll("[slot]")).forEach((ae=>{var ue;null!==(ue=ae.tagName)&&void 0!==ue&&ue.toLowerCase().startsWith("pnx-")&&(ae._parent=this,ae._t=this._t),this.grid.appendChild(ae)}))}previewSequenceHeadingChange(ae){const ue=void 0!==this.map.getLayer(uu);if(this.map._picMarkerPreview.remove(),void 0===ae)return delete this._lastRelHeading,ue&&this.map.setLayoutProperty(uu,"visibility","none"),void(this.picture&&this.map._picMarker.setRotation(this.psv.getXY().x));this._lastRelHeading=ae,ue||this.map.addLayer({id:uu,type:"symbol",source:"geovisio_editor_sequences",layout:{"icon-image":"pnx-marker","icon-overlap":"always","icon-size":.8}});const nt=-this.psv.getPictureRelativeHeading();this.map.setLayoutProperty(uu,"visibility","visible"),this.map.setLayoutProperty(uu,"icon-rotate",["+",["get","view:azimuth"],nt,ae]);const ut=[["==",["geometry-type"],"Point"]];this.picture&&ut.push(["!=",["get","id"],this.picture]),this.map.setFilter(uu,["all",...ut]),this.picture&&this.map._picMarker.setRotation(this.psv.getXY().x)}_onSelect(){void 0!==this._lastRelHeading&&this.previewSequenceHeadingChange(this._lastRelHeading)}}Editor.properties={raster:{converter:ut.A.GetJSONConverter()},background:{type:String},...ut.A.properties},customElements.define("pnx-editor",Editor)},3407:(ae,ue,nt)=>{"use strict";nt.d(ue,{$p:()=>_u,Ay:()=>PhotoViewer,RD:()=>wu});nt(970);var ut=nt(1545),qt=nt(4451),Yt=nt(9039),Xt=nt(9048),ys=nt(5995),Ec=nt(7343),lu=nt(2118),uu=nt(4207);const _u=20,vu=Math.PI/6,wu=["pnx-mini","pnx-widget-player","pnx-widget-zoom"];class PhotoViewer extends Yt.A{constructor(){super(),this["psv-options"]={},this["url-parameters"]=this.getAttribute("url-parameters")||!0,this["keyboard-shortcuts"]=this.getAttribute("keyboard-shortcuts")||!0,this.widgets=this.getAttribute("widgets")||"true",this.grid=(0,ys.createWebComp)("pnx-cornered-grid"),this.psvContainer=document.createElement("div"),this.psvContainer.setAttribute("slot","bg"),this.grid.appendChild(this.psvContainer),this.popup=(0,ys.createWebComp)("pnx-popup",{_parent:this,onclose:this._onPopupClose.bind(this)}),this.tabindex=0,this._sequencesMetadata={}}_createInitParamsHandler(){var ae,ue;this._initParams=new lu.Ay(lu.Ay.GetComponentProperties(PhotoViewer,this),Object.assign({},null===(ae=this.urlHandler)||void 0===ae?void 0:ae.currentURLParams(),null===(ue=this.urlHandler)||void 0===ue?void 0:ue.currentURLParams(!0)),{disableAnnotations:localStorage.getItem(Ec.DISABLE_ANNOTATIONS_PARAM)})}_initWidgets(){"false"!==this._initParams.getParentPostInit().widgets&&((0,Ec.isInIframe)()||(this.grid.appendChild((0,ys.createWebComp)("pnx-widget-player",{slot:"top",_parent:this,class:"pnx-only-psv pnx-print-hidden",size:this.isHeightSmall()?"md":"xl"})),this.grid.appendChild((0,ys.createWebComp)("pnx-annotations-switch",{slot:"top",_parent:this,class:"pnx-only-psv pnx-print-hidden",size:this.isHeightSmall()?"md":"xl"}))),(0,Ec.isInIframe)()?(this.legend=(0,ys.createWebComp)("pnx-widget-legend",{slot:"bottom-right",light:!0,_parent:this,focus:this._initParams.getParentPostInit().focus,picture:this._initParams.getParentPostInit().picture}),this.grid.appendChild(this.legend)):this.isWidthSmall()?(this.legend=(0,ys.createWebComp)("pnx-picture-legend",{_parent:this}),this.bottomDrawer=(0,ys.createWebComp)("pnx-bottom-drawer",{slot:"bottom",_parent:this,class:this._initParams.getParentPostInit().willLoadPicture?void 0:"pnx-hidden"}),this.bottomDrawer.appendChild(this.legend),this.grid.appendChild(this.bottomDrawer),this.addEventListener("select",(ae=>{(0,Ec.isNullId)(ae.detail.picId)?this.bottomDrawer.classList.add("pnx-hidden"):this.bottomDrawer.classList.remove("pnx-hidden")}))):(this.legend=(0,ys.createWebComp)("pnx-widget-legend",{slot:this.isWidthSmall()?void 0:"top-left",_parent:this,focus:this._initParams.getParentPostInit().focus,picture:this._initParams.getParentPostInit().picture}),this.grid.appendChild((0,ys.createWebComp)("pnx-widget-zoom",{slot:"bottom-right",class:"pnx-print-hidden",_parent:this})),this.grid.appendChild(this.legend)))}connectedCallback(){super.connectedCallback(),this.presetsManager=new uu.A(this.lang),this["url-parameters"]&&"false"!==this["url-parameters"]&&(this.urlHandler=new qt.A(this),this.onceReady().then((()=>{this.urlHandler.listenToChanges(),this.urlHandler._onParentChange()}))),this.onceAPIReady().then(this._postAPIInit.bind(this)),this._moveChildToGrid(),window.addEventListener("DOMContentLoaded",(()=>{this._moveChildToGrid()}),{once:!0})}disconnectedCallback(){var ae,ue;super.disconnectedCallback(),null===(ae=this.urlHandler)||void 0===ae||ae.destroy(),null===(ue=this.psv)||void 0===ue||ue.destroy(),document.body.removeEventListener("click",this._toggleKeyboardBasedOnFocus),window.removeEventListener("keypress",this._toggleKeyboardBasedOnFocus)}getClassName(){return"PhotoViewer"}onceReady(){return this.oncePSVReady().then((()=>this._initParams.getParentPostInit().willLoadPicture&&!this.psv.getPictureMetadata()?this.onceFirstPicLoaded():Promise.resolve()))}render(){return[this.loader,this.grid,this.popup]}getSubComponentsNames(){return super.getSubComponentsNames().concat(["psv","grid","popup","urlHandler"])}oncePSVReady(){let ae;return new Promise((ue=>{ae=setInterval((()=>{this.psv&&"object"===typeof this.psv&&(this.psv.container?(clearInterval(ae),ue()):this.psv.addEventListener&&this.psv.addEventListener("ready",(()=>{clearInterval(ae),ue()}),{once:!0}))}),250)}))}onceFirstPicLoaded(){return this.oncePSVReady().then((()=>this.psv.getPictureMetadata()?Promise.resolve():new Promise((ae=>{this.psv.addEventListener("picture-loaded",ae,{once:!0})}))))}async _postAPIInit(){this.loader.setAttribute("value",30),this._createInitParamsHandler();const ae=this._initParams.getParentPostInit();this._initPSV(),this._initWidgets(),(0,lu.ai)(this,ae),ae.keyboardShortcuts&&this._handleKeyboardManagement(),ae.willLoadPicture?this.psv.getPictureMetadata()?this.loader.dismiss():this.psv.addEventListener("picture-loaded",(()=>this.loader.dismiss()),{once:!0}):this.loader.dismiss()}_initPSV(){try{this.psv=new Xt.Ay(this,this.psvContainer,{shouldGoFast:this._psvShouldGoFast.bind(this),keyboard:"always",keyboardActions:{...ut.zY.keyboardActions,8:"ROTATE_UP",2:"ROTATE_DOWN",4:"ROTATE_LEFT",6:"ROTATE_RIGHT",PageUp:()=>this.psv.goToNextPicture(),9:()=>this.psv.goToNextPicture(),PageDown:()=>this.psv.goToPrevPicture(),3:()=>this.psv.goToPrevPicture(),5:()=>this.moveCenter(),"*":()=>this.moveCenter(),Home:()=>{var ae;return null===(ae=this._toggleFocus)||void 0===ae?void 0:ae.call(this)},7:()=>{var ae;return null===(ae=this._toggleFocus)||void 0===ae?void 0:ae.call(this)},End:()=>this.mini.toggleAttribute("collapsed"),1:()=>this.mini.toggleAttribute("collapsed")," ":()=>this.psv.toggleSequencePlaying(),0:()=>this.psv.toggleSequencePlaying()},...this._initParams.getPSVInit()}),this.oncePSVReady().then((()=>{this.loader.setAttribute("value",50),(0,lu.Vy)(this.psv,this._initParams.getPSVPostInit())})),this.psv.addEventListener("sequence-playing",(()=>this.classList.add("pnx-playing"))),this.psv.addEventListener("sequence-stopped",(()=>this.classList.remove("pnx-playing")))}catch(ae){let ue=ut.IJ.isWebGLSupported?this._t.pnx.error_psv:this._t.pnx.error_webgl;this.loader.dismiss(ae,ue)}}_enableKeyboard(){this.psv.startKeyboardControl()}_disableKeyboard(){this.psv.stopKeyboardControl()}_toggleKeyboardBasedOnFocus(ae){const ue=(null===ae||void 0===ae?void 0:ae.target)||document.activeElement;if(this.contains(ue)){for(let ae of this.grid.childNodes)if("bg"!==ae.getAttribute("slot")&&!wu.includes(ae.tagName.toLowerCase())&&ae.contains(ue))return void this._disableKeyboard();this._enableKeyboard()}else this._disableKeyboard()}_handleKeyboardManagement(){window.addEventListener("click",(ae=>this._toggleKeyboardBasedOnFocus(ae))),window.addEventListener("keypress",this._toggleKeyboardBasedOnFocus.bind(this)),this.popup.addEventListener("open",this._disableKeyboard.bind(this)),this.popup.addEventListener("close",this._enableKeyboard.bind(this)),this.psv.addEventListener("click",this._enableKeyboard.bind(this));for(let ae of this.grid.childNodes)"bg"===ae.getAttribute("slot")||wu.includes(ae.tagName.toLowerCase())||(ae.addEventListener("focusin",this._disableKeyboard.bind(this)),ae.addEventListener("focusout",(()=>{null===this.popup.getAttribute("visible")&&this._enableKeyboard()})))}_psvShouldGoFast(){return this.psv._sequencePlaying&&this.psv.getTransitionDuration()<1e3}_moveChildToGrid(){Array.from(this.querySelectorAll("[slot]")).forEach((ae=>{var ue;null!==(ue=ae.tagName)&&void 0!==ue&&ue.toLowerCase().startsWith("pnx-")&&(ae._parent=this,ae._t=this._t),"editors"===ae.getAttribute("slot")?this.onceReady().then((()=>{var ue;return null===(ue=this.legend)||void 0===ue?void 0:ue.appendChild(ae)})):this.grid.appendChild(ae)}))}setPopup(ae){let ue=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;ae?this.popup.setAttribute("visible",""):this.popup.removeAttribute("visible"),this.popup.innerHTML="","string"===typeof ue?this.popup.innerHTML=ue:Array.isArray(ue)&&ue.forEach((ae=>this.popup.appendChild(ae)))}_onPopupClose(){this.dispatchEvent(new CustomEvent("focus-changed",{detail:{focus:this.map&&this.isMapWide()?"map":"pic"}}))}_showQualityScoreDoc(){this.setPopup(!0,[(0,ys.createWebComp)("pnx-quality-score-doc",{_t:this._t})])}_showReportForm(){if(!this.psv.getPictureMetadata())throw new Error("No picture currently selected");this.setPopup(!0,[(0,ys.createWebComp)("pnx-report-form",{_parent:this})])}_showShareOptions(){this.setPopup(!0,[(0,ys.createWebComp)("pnx-share-menu",{_parent:this})])}_showSemanticsDoc(){this.setPopup(!0,[(0,ys.createWebComp)("pnx-semantics-doc",{_t:this._t})])}moveCenter(){this.psv.getPictureMetadata()&&this._psvAnimate({speed:Xt.LM,yaw:0,pitch:0,zoom:Xt.cS})}moveLeft(){this._moveToDirection("left")}moveRight(){this._moveToDirection("right")}moveUp(){this._moveToDirection("up")}moveDown(){this._moveToDirection("down")}_moveToDirection(ae){let ue=this.psv.getPosition();switch(ae){case"up":ue.pitch+=vu;break;case"left":ue.yaw-=vu;break;case"down":ue.pitch-=vu;break;case"right":ue.yaw+=vu}this._psvAnimate({speed:Xt.LM,...ue})}_psvAnimate(ae){this._lastPsvAnim&&this._lastPsvAnim.cancel(),this._lastPsvAnim=this.psv.animate(ae)}addEventListener(ae,ue,nt){super.addEventListener(ae,ue,nt)}}PhotoViewer.properties={"psv-options":{converter:Yt.A.GetJSONConverter()},widgets:{type:String},"url-parameters":{type:String},"keyboard-shortcuts":{type:String},tabindex:{type:Number},...Yt.A.properties},customElements.define("pnx-photo-viewer",PhotoViewer)},8743:(ae,ue,nt)=>{"use strict";nt.d(ue,{A:()=>Viewer});nt(9616);var ut=nt(8340),qt=nt(3407),Yt=nt(2771),Xt=nt(7343),ys=nt(5995),Ec=nt(9683),lu=nt(2e3),uu=nt(9438),_u=nt(2118);const vu=100;class Viewer extends qt.Ay{constructor(){super(),this["map-options"]=!0,this.geocoder=this.getAttribute("geocoder")||"nominatim",this.mini=(0,ys.createWebComp)("pnx-mini",{slot:"bottom-left",_parent:this,onexpand:this._onMiniExpand.bind(this),collapsed:!!(0,Xt.isNullId)(this.picture)||void 0}),this.mini.addEventListener("expand",this._toggleFocus.bind(this)),this.grid.appendChild(this.mini),this.mapContainer=document.createElement("div"),this.tabindex=0}_createInitParamsHandler(){var ae,ue;this._initParams=new _u.Ay(_u.Ay.GetComponentProperties(Viewer,this),Object.assign({},null===(ae=this.urlHandler)||void 0===ae?void 0:ae.currentURLParams(),null===(ue=this.urlHandler)||void 0===ue?void 0:ue.currentURLParams(!0)),{map:(0,ut.getMapParamsFromLocalStorage)(),disableAnnotations:localStorage.getItem(Xt.DISABLE_ANNOTATIONS_PARAM)})}_initWidgets(){var ae,ue;"false"!==this._initParams.getParentPostInit().widgets&&(this.grid.appendChild((0,ys.createWebComp)("pnx-widget-zoom",{slot:this.isWidthSmall()?"top-left":"bottom-right",class:this.isWidthSmall()?"pnx-only-map pnx-print-hidden":"pnx-print-hidden",_parent:this})),(0,Xt.isInIframe)()?(this.legend=(0,ys.createWebComp)("pnx-widget-legend",{slot:"bottom-right",light:!0,_parent:this,focus:this._initParams.getParentPostInit().focus,picture:this._initParams.getParentPostInit().picture}),this.grid.appendChild(this.legend)):this.isWidthSmall()?(this.legend=(0,ys.createWebComp)("pnx-picture-legend",{_parent:this}),this.bottomDrawer=(0,ys.createWebComp)("pnx-bottom-drawer",{slot:"bottom",_parent:this,class:this._initParams.getParentPostInit().willLoadPicture?void 0:"pnx-hidden"}),this.bottomDrawer.appendChild(this.legend),this.grid.appendChild(this.bottomDrawer),this.addEventListener("select",(ae=>{(0,Xt.isNullId)(ae.detail.picId)?this.bottomDrawer.classList.add("pnx-hidden"):this.bottomDrawer.classList.remove("pnx-hidden")}))):(this.legend=(0,ys.createWebComp)("pnx-widget-legend",{slot:this.isWidthSmall()?"top":"top-left",_parent:this,focus:this._initParams.getParentPostInit().focus,picture:this._initParams.getParentPostInit().picture}),this._miniPicLegend=(0,ys.createWebComp)("pnx-mini-picture-legend",{_parent:this}),this.grid.appendChild(this.legend)),(0,Xt.isInIframe)()||(this.grid.appendChild((0,ys.createWebComp)("pnx-widget-player",{slot:"top",_parent:this,class:"pnx-only-psv pnx-print-hidden",size:this.isHeightSmall()?"md":"xl"})),this.grid.appendChild((0,ys.createWebComp)("pnx-annotations-switch",{slot:"top",_parent:this,class:"pnx-only-psv pnx-print-hidden",size:this.isHeightSmall()?"md":"xl"})),this.grid.appendChild((0,ys.createWebComp)("pnx-widget-geosearch",{slot:this.isWidthSmall()?"top-right":"top-left",_parent:this,class:"pnx-only-map pnx-print-hidden",geocoder:this._initParams.getParentPostInit().geocoder})),this.grid.appendChild((0,ys.createWebComp)("pnx-widget-mapfilters",{slot:this.isWidthSmall()?"top-right":"top-left",_parent:this,"user-search":null!==this.api._endpoints.user_search&&null!==this.api._endpoints.user_tiles,"quality-score":(null===(ae=this.map)||void 0===ae||null===(ue=ae._hasQualityScore)||void 0===ue?void 0:ue.call(ae))||!1,class:"pnx-only-map pnx-print-hidden"})),this.grid.appendChild((0,ys.createWebComp)("pnx-widget-maplayers",{slot:"top-right",_parent:this,class:"pnx-only-map pnx-print-hidden"}))))}disconnectedCallback(){var ae;super.disconnectedCallback(),null===(ae=this.map)||void 0===ae||ae.destroy()}getClassName(){return"Viewer"}getSubComponentsNames(){return super.getSubComponentsNames().concat(["mini","map"])}onceReady(){return Promise.all([this.oncePSVReady(),this.onceMapReady()]).then((()=>this._initParams.getParentPostInit().willLoadPicture&&!this.psv.getPictureMetadata()?this.onceFirstPicLoaded():Promise.resolve()))}attributeChangedCallback(ae,ue,nt){var ut,qt;if(super.attributeChangedCallback(ae,ue,nt),"picture"===ae)if(null===(ut=this.legend)||void 0===ut||null===(qt=ut.setAttribute)||void 0===qt||qt.call(ut,"picture",nt),(0,Xt.isNullId)(ue)&&!(0,Xt.isNullId)(nt)&&this.mini.removeAttribute("collapsed"),(0,Xt.isNullId)(nt))this.map&&this.isMapWide()?this.mini.classList.add("pnx-hidden"):this.map&&!this.isMapWide()&&this._setFocus("map");else if((0,Xt.isNullId)(ue)&&this.sequence==this._initParams.getParentPostInit().sequence&&!this._initParams.getParentPostInit().picture){var Yt,ys;this.mini.classList.remove("pnx-hidden"),this.mini.removeAttribute("collapsed"),"closed"===(null===(Yt=this.bottomDrawer)||void 0===Yt||null===(ys=Yt.getAttribute)||void 0===ys?void 0:ys.call(Yt,"openness"))&&this.bottomDrawer.setAttribute("openness","half-opened")}else{var Ec,lu;if(this.mini.classList.remove("pnx-hidden"),(0,Xt.isNullId)(ue))this._setFocus("pic"),"closed"===(null===(Ec=this.bottomDrawer)||void 0===Ec||null===(lu=Ec.getAttribute)||void 0===lu?void 0:lu.call(Ec,"openness"))&&this.bottomDrawer.setAttribute("openness","half-opened")}"focus"===ae&&this._setFocus(nt)}onceMapReady(){if(!this.map)return Promise.resolve();let ae;return new Promise((ue=>{ae=setInterval((()=>{var nt,ut,qt;"object"===typeof this.map&&(null!==(nt=this.map)&&void 0!==nt&&null!==(ut=nt.loaded)&&void 0!==ut&&ut.call(nt)?(clearInterval(ae),ue()):null!==(qt=this.map)&&void 0!==qt&&qt.once&&this.map.once("render",(()=>{clearInterval(ae),ue()})))}),250)}))}async _initMap(){await new Promise((ae=>{this.map=new Yt.A(this,this.mapContainer,this._initParams.getMapInit()),(0,ut.saveMapParamsToLocalStorage)(this.map),this.map.once("users-changed",(()=>{this.loader.setAttribute("value",75),ae()}))})),await(0,_u.mK)(this.map,this._initParams.getMapPostInit()),(0,ut.initMapKeyboardHandler)(this),(0,ut.linkMapAndPhoto)(this)}async _postAPIInit(){this.loader.setAttribute("value",30),this._createInitParamsHandler();const ae=this._initParams.getParentPostInit();this._initPSV(),await this._initMap(),this._initWidgets(),this._moveChildToGrid(),(0,_u.iz)(this,ae),ae.keyboardShortcuts&&this._handleKeyboardManagement(),ae.willLoadPicture?this.psv.addEventListener("picture-loaded",(ue=>{(0,_u.iz)(this,ae),this.loader.dismiss()}),{once:!0}):this.loader.dismiss()}_enableKeyboard(){this.map&&this.isMapWide()?this._enableKeyboardMap():this._enableKeyboardPSV()}_enableKeyboardMap(){this.psv.stopKeyboardControl(),this.map.keyboard.enable()}_enableKeyboardPSV(){this.psv.startKeyboardControl(),this.map.keyboard.disable()}_disableKeyboard(){this.psv.stopKeyboardControl(),this.map.keyboard.disable()}_toggleKeyboardBasedOnFocus(ae){const ue=(null===ae||void 0===ae?void 0:ae.target)||document.activeElement;if(this.contains(ue)){for(let ae of this.grid.childNodes)if("bg"!==ae.getAttribute("slot")&&!qt.RD.includes(ae.tagName.toLowerCase())&&ae.contains(ue))return void this._disableKeyboard();this._enableKeyboard()}else this._disableKeyboard()}_handleKeyboardManagement(){window.addEventListener("click",(ae=>this._toggleKeyboardBasedOnFocus(ae))),window.addEventListener("keypress",this._toggleKeyboardBasedOnFocus.bind(this)),this.addEventListener("focus-changed",(ae=>{this.popup.getAttribute("visible")?this._disableKeyboard():"map"===ae.detail.focus?this._enableKeyboardMap():this._enableKeyboardPSV()})),this.popup.addEventListener("open",this._disableKeyboard.bind(this)),this.popup.addEventListener("close",this._enableKeyboard.bind(this)),this.psv.addEventListener("click",this._enableKeyboardPSV.bind(this));for(let ae of this.grid.childNodes)"bg"===ae.getAttribute("slot")||qt.RD.includes(ae.tagName.toLowerCase())||(ae.addEventListener("focusin",this._disableKeyboard.bind(this)),ae.addEventListener("focusout",(()=>{null===this.popup.getAttribute("visible")&&this._enableKeyboard()})))}moveCenter(){const ae=this.psv.getPictureMetadata();ae&&(this.map&&this.isMapWide()?this.map.flyTo({center:ae.gps,zoom:20}):super.moveCenter())}_moveToDirection(ae){if(this.map&&this.isMapWide()){let ue;switch(ae){case"up":ue=[0,-100];break;case"left":ue=[-100,0];break;case"down":ue=[0,vu];break;case"right":ue=[vu,0]}this.map.panBy(ue)}else super._moveToDirection(ae)}isMapWide(){return this.mapContainer.parentNode==this.grid}_setFocus(ae){var ue,nt,ut,qt;let Yt=arguments.length>1&&void 0!==arguments[1]&&arguments[1],uu=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if("map"===ae&&!this.map)throw new Error("Map is not enabled");if(!["map","pic"].includes(ae))throw new Error("Invalid focus value (should be pic or map)");if(this.focus=ae,(uu||("map"!==ae||!this.map||!this.isMapWide())&&("pic"!==ae||this.map&&this.isMapWide()))&&("map"===ae?(this.psvContainer.parentNode==this.grid&&(this.grid.removeChild(this.psvContainer),this.psvContainer.removeAttribute("slot")),this.mapContainer.parentNode==this.mini&&this.mini.removeChild(this.mapContainer),this.mapContainer.setAttribute("slot","bg"),this.grid.appendChild(this.mapContainer),this.mini.appendChild(this.psvContainer),this.mini.icon=(0,ys.fa)(Ec.pt),this._miniPicLegend&&this.mini.appendChild(this._miniPicLegend),(0,Xt.isNullId)(this.picture)?this.mini.classList.add("pnx-hidden"):this.mini.classList.remove("pnx-hidden"),this.map.getCanvas().focus()):(this.mapContainer.parentNode==this.grid&&(this.grid.removeChild(this.mapContainer),this.mapContainer.removeAttribute("slot")),this.psvContainer.parentNode==this.mini&&(this.mini.removeChild(this.psvContainer),this._miniPicLegend&&this.mini.removeChild(this._miniPicLegend)),this.psvContainer.setAttribute("slot","bg"),this.grid.appendChild(this.psvContainer),this.mini.classList.remove("pnx-hidden"),this.mini.appendChild(this.mapContainer),this.mini.icon=(0,ys.fa)(lu.e5),this.psvContainer.focus()),null===this||void 0===this||null===(ue=this.map)||void 0===ue||null===(nt=ue.resize)||void 0===nt||nt.call(ue),this.psv.autoSize(),this.psv.forceRefresh(),null===(ut=this.legend)||void 0===ut||null===(qt=ut.setAttribute)||void 0===qt||qt.call(ut,"focus",this.focus),!Yt)){const ue=new CustomEvent("focus-changed",{detail:{focus:ae}});this.dispatchEvent(ue)}}_toggleFocus(){this._setFocus(this.isMapWide()?"pic":"map")}_onMiniExpand(){this.map.resize(),this.psv.autoSize()}_onMapFiltersChange(){var ae;const ue=(0,uu.qi)("#pnx-map-filters-menu"),nt=(0,uu.qi)("#pnx-map-theme"),qt=(0,ut.mapFiltersFormValues)(ue,nt,null===(ae=this.map)||void 0===ae?void 0:ae._hasQualityScore());this.map.setFilters(qt)}}Viewer.properties={"map-options":{converter:qt.Ay.GetJSONConverter()},focus:{type:String,reflect:!0},geocoder:{type:String},tabindex:{type:Number},...qt.Ay.properties},customElements.define("pnx-viewer",Viewer)},3921:(ae,ue,nt)=>{"use strict";nt.r(ue),nt.d(ue,{Basic:()=>ut.A,CoverageMap:()=>qt.A,Editor:()=>Yt.A,PhotoViewer:()=>ys.Ay,Viewer:()=>Xt.A});var ut=nt(9039),qt=nt(153),Yt=nt(1752),Xt=nt(8743),ys=nt(3407)},9341:(ae,ue,nt)=>{"use strict";nt.r(ue),nt.d(ue,{core:()=>ut,layout:()=>qt,menus:()=>Yt,ui:()=>Xt});var ut=nt(3921),qt=nt(456),Yt=nt(8794),Xt=nt(7091)},6784:(ae,ue,nt)=>{"use strict";nt.d(ue,{A:()=>BottomDrawer});var ut=nt(4542),qt=nt(1198),Yt=nt(5995);const Xt={opened:0,"half-opened":.7,closed:1};class BottomDrawer extends ut.WF{constructor(){super(),this._isDragging=!1,this.openness="half-opened"}firstUpdated(){super.firstUpdated(),this._boundTouchMove=this._onTouchMove.bind(this),this._boundTouchEnd=this._onTouchEnd.bind(this),this._drawerHeight=window.innerHeight-30;const ae=this._getDrawer();ae&&(ae.style.height=`${this._drawerHeight}px`,ae.style.maxHeight=`${this._drawerHeight}px`,(0,Yt.onceParentAvailable)(this).then((()=>this._parent.onceReady())).then((()=>{var ae,ue;null===(ae=this._parent.map)||void 0===ae||ae.addEventListener("click",(()=>this.openness="closed")),null===(ue=this._parent.psv)||void 0===ue||ue.addEventListener("click",(()=>this.openness="closed"))})))}attributeChangedCallback(ae,ue,nt){if(super.attributeChangedCallback(ae,ue,nt),"openness"===ae){if("opened"!==nt){const ae=this.shadowRoot.querySelector(".content");ae&&(ae.scrollTop=0)}const ae=this._getDrawer();ae&&(ae.style.transform=null)}}disconnectedCallback(){super.disconnectedCallback(),this._cleanupTouchListeners()}_getDrawer(){var ae;return null===(ae=this.shadowRoot)||void 0===ae?void 0:ae.querySelector(".drawer")}_onHandleClick(){"opened"===this.openness?this.openness="closed":"half-opened"===this.openness?this.openness="opened":"closed"===this.openness&&(this.openness="half-opened")}_onTouchStart(ae){this._isDragging=!0,this._startFingerY=ae.touches[0].clientY,this._deltaFingerY=0,this._drawerY=this._drawerHeight*Xt[this.openness],window.addEventListener("touchmove",this._boundTouchMove,{passive:!0}),window.addEventListener("touchend",this._boundTouchEnd),window.addEventListener("touchcancel",this._boundTouchEnd)}_onTouchMove(ae){if(!this._isDragging)return;const ue=this.shadowRoot.querySelector(".content");ue.scrollHeight>ue.offsetHeight&&ue.scrollTop>0?this._updateDrawerTransform(0):(this._deltaFingerY=ae.touches[0].clientY-this._startFingerY,this._updateDrawerTransform(this._drawerY+this._deltaFingerY))}_onTouchEnd(ae){(this._isDragging&&!(Math.abs(this._deltaFingerY)<30)||ae.target.closest(".handle"))&&(ae.preventDefault(),this._isDragging=!1,0===this._deltaFingerY&&"closed"===this.openness?this.openness="half-opened":this._updateDrawerTransform(this._drawerY+this._deltaFingerY,!0),this._cleanupTouchListeners(),this._startFingerY=null,this._deltaFingerY=null)}_cleanupTouchListeners(){window.removeEventListener("touchmove",this._boundTouchMove),window.removeEventListener("touchend",this._boundTouchEnd),window.removeEventListener("touchcancel",this._boundTouchCancel)}_updateDrawerTransform(ae){let ue=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const nt=this._getDrawer();nt&&(ae=Math.max(0,Math.min(ae,this._drawerHeight-30)),ue&&(this._deltaFingerY<0?"closed"===this.openness?Math.abs(this._deltaFingerY)>this._drawerHeight*(1-Xt["half-opened"])?this.openness="opened":this.openness="half-opened":this.openness="opened":this.openness="closed",this._drawerY=null,ae=Math.max(0,Math.min(Xt[this.openness]*this._drawerHeight,this._drawerHeight-30))),nt.style.transform=`translateY(${ae}px)`)}render(){const ae={drawer:!0,[this.openness]:!0,dragging:this._isDragging};return ut.qy`
13
13
  <div
14
14
  class=${(0,qt.H)(ae)}
15
15
  @touchstart="${this._onTouchStart}"
@@ -2919,5 +2919,5 @@ const ut="179",qt=0,Yt=1,Xt=2,ys=1,Ec=2,lu=3,uu=0,_u=1,vu=2,wu=0,Hu=1,qu=2,Ju=3,
2919
2919
  * @license
2920
2920
  * Copyright 2010-2025 Three.js Authors
2921
2921
  * SPDX-License-Identifier: MIT
2922
- */function WebGLAnimation(){let ae=null,ue=!1,nt=null,ut=null;function onAnimationFrame(ue,qt){nt(ue,qt),ut=ae.requestAnimationFrame(onAnimationFrame)}return{start:function(){!0!==ue&&null!==nt&&(ut=ae.requestAnimationFrame(onAnimationFrame),ue=!0)},stop:function(){ae.cancelAnimationFrame(ut),ue=!1},setAnimationLoop:function(ae){nt=ae},setContext:function(ue){ae=ue}}}function WebGLAttributes(ae){const ue=new WeakMap;return{get:function(ae){return ae.isInterleavedBufferAttribute&&(ae=ae.data),ue.get(ae)},remove:function(nt){nt.isInterleavedBufferAttribute&&(nt=nt.data);const ut=ue.get(nt);ut&&(ae.deleteBuffer(ut.buffer),ue.delete(nt))},update:function(nt,ut){if(nt.isInterleavedBufferAttribute&&(nt=nt.data),nt.isGLBufferAttribute){const ae=ue.get(nt);return void((!ae||ae.version<nt.version)&&ue.set(nt,{buffer:nt.buffer,type:nt.type,bytesPerElement:nt.elementSize,version:nt.version}))}const qt=ue.get(nt);if(void 0===qt)ue.set(nt,function(ue,nt){const ut=ue.array,qt=ue.usage,Yt=ut.byteLength,Xt=ae.createBuffer();let ys;if(ae.bindBuffer(nt,Xt),ae.bufferData(nt,ut,qt),ue.onUploadCallback(),ut instanceof Float32Array)ys=ae.FLOAT;else if("undefined"!==typeof Float16Array&&ut instanceof Float16Array)ys=ae.HALF_FLOAT;else if(ut instanceof Uint16Array)ys=ue.isFloat16BufferAttribute?ae.HALF_FLOAT:ae.UNSIGNED_SHORT;else if(ut instanceof Int16Array)ys=ae.SHORT;else if(ut instanceof Uint32Array)ys=ae.UNSIGNED_INT;else if(ut instanceof Int32Array)ys=ae.INT;else if(ut instanceof Int8Array)ys=ae.BYTE;else if(ut instanceof Uint8Array)ys=ae.UNSIGNED_BYTE;else{if(!(ut instanceof Uint8ClampedArray))throw new Error("THREE.WebGLAttributes: Unsupported buffer data format: "+ut);ys=ae.UNSIGNED_BYTE}return{buffer:Xt,type:ys,bytesPerElement:ut.BYTES_PER_ELEMENT,version:ue.version,size:Yt}}(nt,ut));else if(qt.version<nt.version){if(qt.size!==nt.array.byteLength)throw new Error("THREE.WebGLAttributes: The size of the buffer attribute's array buffer does not match the original size. Resizing buffer attributes is not supported.");!function(ue,nt,ut){const qt=nt.array,Yt=nt.updateRanges;if(ae.bindBuffer(ut,ue),0===Yt.length)ae.bufferSubData(ut,0,qt);else{Yt.sort(((ae,ue)=>ae.start-ue.start));let ue=0;for(let ae=1;ae<Yt.length;ae++){const nt=Yt[ue],ut=Yt[ae];ut.start<=nt.start+nt.count+1?nt.count=Math.max(nt.count,ut.start+ut.count-nt.start):(++ue,Yt[ue]=ut)}Yt.length=ue+1;for(let nt=0,Xt=Yt.length;nt<Xt;nt++){const ue=Yt[nt];ae.bufferSubData(ut,ue.start*qt.BYTES_PER_ELEMENT,qt,ue.start,ue.count)}nt.clearUpdateRanges()}nt.onUploadCallback()}(qt.buffer,nt,ut),qt.version=nt.version}}}}const qt={alphahash_fragment:"#ifdef USE_ALPHAHASH\n\tif ( diffuseColor.a < getAlphaHashThreshold( vPosition ) ) discard;\n#endif",alphahash_pars_fragment:"#ifdef USE_ALPHAHASH\n\tconst float ALPHA_HASH_SCALE = 0.05;\n\tfloat hash2D( vec2 value ) {\n\t\treturn fract( 1.0e4 * sin( 17.0 * value.x + 0.1 * value.y ) * ( 0.1 + abs( sin( 13.0 * value.y + value.x ) ) ) );\n\t}\n\tfloat hash3D( vec3 value ) {\n\t\treturn hash2D( vec2( hash2D( value.xy ), value.z ) );\n\t}\n\tfloat getAlphaHashThreshold( vec3 position ) {\n\t\tfloat maxDeriv = max(\n\t\t\tlength( dFdx( position.xyz ) ),\n\t\t\tlength( dFdy( position.xyz ) )\n\t\t);\n\t\tfloat pixScale = 1.0 / ( ALPHA_HASH_SCALE * maxDeriv );\n\t\tvec2 pixScales = vec2(\n\t\t\texp2( floor( log2( pixScale ) ) ),\n\t\t\texp2( ceil( log2( pixScale ) ) )\n\t\t);\n\t\tvec2 alpha = vec2(\n\t\t\thash3D( floor( pixScales.x * position.xyz ) ),\n\t\t\thash3D( floor( pixScales.y * position.xyz ) )\n\t\t);\n\t\tfloat lerpFactor = fract( log2( pixScale ) );\n\t\tfloat x = ( 1.0 - lerpFactor ) * alpha.x + lerpFactor * alpha.y;\n\t\tfloat a = min( lerpFactor, 1.0 - lerpFactor );\n\t\tvec3 cases = vec3(\n\t\t\tx * x / ( 2.0 * a * ( 1.0 - a ) ),\n\t\t\t( x - 0.5 * a ) / ( 1.0 - a ),\n\t\t\t1.0 - ( ( 1.0 - x ) * ( 1.0 - x ) / ( 2.0 * a * ( 1.0 - a ) ) )\n\t\t);\n\t\tfloat threshold = ( x < ( 1.0 - a ) )\n\t\t\t? ( ( x < a ) ? cases.x : cases.y )\n\t\t\t: cases.z;\n\t\treturn clamp( threshold , 1.0e-6, 1.0 );\n\t}\n#endif",alphamap_fragment:"#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vAlphaMapUv ).g;\n#endif",alphamap_pars_fragment:"#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",alphatest_fragment:"#ifdef USE_ALPHATEST\n\t#ifdef ALPHA_TO_COVERAGE\n\tdiffuseColor.a = smoothstep( alphaTest, alphaTest + fwidth( diffuseColor.a ), diffuseColor.a );\n\tif ( diffuseColor.a == 0.0 ) discard;\n\t#else\n\tif ( diffuseColor.a < alphaTest ) discard;\n\t#endif\n#endif",alphatest_pars_fragment:"#ifdef USE_ALPHATEST\n\tuniform float alphaTest;\n#endif",aomap_fragment:"#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vAoMapUv ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_CLEARCOAT ) \n\t\tclearcoatSpecularIndirect *= ambientOcclusion;\n\t#endif\n\t#if defined( USE_SHEEN ) \n\t\tsheenSpecularIndirect *= ambientOcclusion;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD )\n\t\tfloat dotNV = saturate( dot( geometryNormal, geometryViewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );\n\t#endif\n#endif",aomap_pars_fragment:"#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif",batching_pars_vertex:"#ifdef USE_BATCHING\n\t#if ! defined( GL_ANGLE_multi_draw )\n\t#define gl_DrawID _gl_DrawID\n\tuniform int _gl_DrawID;\n\t#endif\n\tuniform highp sampler2D batchingTexture;\n\tuniform highp usampler2D batchingIdTexture;\n\tmat4 getBatchingMatrix( const in float i ) {\n\t\tint size = textureSize( batchingTexture, 0 ).x;\n\t\tint j = int( i ) * 4;\n\t\tint x = j % size;\n\t\tint y = j / size;\n\t\tvec4 v1 = texelFetch( batchingTexture, ivec2( x, y ), 0 );\n\t\tvec4 v2 = texelFetch( batchingTexture, ivec2( x + 1, y ), 0 );\n\t\tvec4 v3 = texelFetch( batchingTexture, ivec2( x + 2, y ), 0 );\n\t\tvec4 v4 = texelFetch( batchingTexture, ivec2( x + 3, y ), 0 );\n\t\treturn mat4( v1, v2, v3, v4 );\n\t}\n\tfloat getIndirectIndex( const in int i ) {\n\t\tint size = textureSize( batchingIdTexture, 0 ).x;\n\t\tint x = i % size;\n\t\tint y = i / size;\n\t\treturn float( texelFetch( batchingIdTexture, ivec2( x, y ), 0 ).r );\n\t}\n#endif\n#ifdef USE_BATCHING_COLOR\n\tuniform sampler2D batchingColorTexture;\n\tvec3 getBatchingColor( const in float i ) {\n\t\tint size = textureSize( batchingColorTexture, 0 ).x;\n\t\tint j = int( i );\n\t\tint x = j % size;\n\t\tint y = j / size;\n\t\treturn texelFetch( batchingColorTexture, ivec2( x, y ), 0 ).rgb;\n\t}\n#endif",batching_vertex:"#ifdef USE_BATCHING\n\tmat4 batchingMatrix = getBatchingMatrix( getIndirectIndex( gl_DrawID ) );\n#endif",begin_vertex:"vec3 transformed = vec3( position );\n#ifdef USE_ALPHAHASH\n\tvPosition = vec3( position );\n#endif",beginnormal_vertex:"vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n\tvec3 objectTangent = vec3( tangent.xyz );\n#endif",bsdfs:"float G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, 1.0, dotVH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n} // validated",iridescence_fragment:"#ifdef USE_IRIDESCENCE\n\tconst mat3 XYZ_TO_REC709 = mat3(\n\t\t 3.2404542, -0.9692660, 0.0556434,\n\t\t-1.5371385, 1.8760108, -0.2040259,\n\t\t-0.4985314, 0.0415560, 1.0572252\n\t);\n\tvec3 Fresnel0ToIor( vec3 fresnel0 ) {\n\t\tvec3 sqrtF0 = sqrt( fresnel0 );\n\t\treturn ( vec3( 1.0 ) + sqrtF0 ) / ( vec3( 1.0 ) - sqrtF0 );\n\t}\n\tvec3 IorToFresnel0( vec3 transmittedIor, float incidentIor ) {\n\t\treturn pow2( ( transmittedIor - vec3( incidentIor ) ) / ( transmittedIor + vec3( incidentIor ) ) );\n\t}\n\tfloat IorToFresnel0( float transmittedIor, float incidentIor ) {\n\t\treturn pow2( ( transmittedIor - incidentIor ) / ( transmittedIor + incidentIor ));\n\t}\n\tvec3 evalSensitivity( float OPD, vec3 shift ) {\n\t\tfloat phase = 2.0 * PI * OPD * 1.0e-9;\n\t\tvec3 val = vec3( 5.4856e-13, 4.4201e-13, 5.2481e-13 );\n\t\tvec3 pos = vec3( 1.6810e+06, 1.7953e+06, 2.2084e+06 );\n\t\tvec3 var = vec3( 4.3278e+09, 9.3046e+09, 6.6121e+09 );\n\t\tvec3 xyz = val * sqrt( 2.0 * PI * var ) * cos( pos * phase + shift ) * exp( - pow2( phase ) * var );\n\t\txyz.x += 9.7470e-14 * sqrt( 2.0 * PI * 4.5282e+09 ) * cos( 2.2399e+06 * phase + shift[ 0 ] ) * exp( - 4.5282e+09 * pow2( phase ) );\n\t\txyz /= 1.0685e-7;\n\t\tvec3 rgb = XYZ_TO_REC709 * xyz;\n\t\treturn rgb;\n\t}\n\tvec3 evalIridescence( float outsideIOR, float eta2, float cosTheta1, float thinFilmThickness, vec3 baseF0 ) {\n\t\tvec3 I;\n\t\tfloat iridescenceIOR = mix( outsideIOR, eta2, smoothstep( 0.0, 0.03, thinFilmThickness ) );\n\t\tfloat sinTheta2Sq = pow2( outsideIOR / iridescenceIOR ) * ( 1.0 - pow2( cosTheta1 ) );\n\t\tfloat cosTheta2Sq = 1.0 - sinTheta2Sq;\n\t\tif ( cosTheta2Sq < 0.0 ) {\n\t\t\treturn vec3( 1.0 );\n\t\t}\n\t\tfloat cosTheta2 = sqrt( cosTheta2Sq );\n\t\tfloat R0 = IorToFresnel0( iridescenceIOR, outsideIOR );\n\t\tfloat R12 = F_Schlick( R0, 1.0, cosTheta1 );\n\t\tfloat T121 = 1.0 - R12;\n\t\tfloat phi12 = 0.0;\n\t\tif ( iridescenceIOR < outsideIOR ) phi12 = PI;\n\t\tfloat phi21 = PI - phi12;\n\t\tvec3 baseIOR = Fresnel0ToIor( clamp( baseF0, 0.0, 0.9999 ) );\t\tvec3 R1 = IorToFresnel0( baseIOR, iridescenceIOR );\n\t\tvec3 R23 = F_Schlick( R1, 1.0, cosTheta2 );\n\t\tvec3 phi23 = vec3( 0.0 );\n\t\tif ( baseIOR[ 0 ] < iridescenceIOR ) phi23[ 0 ] = PI;\n\t\tif ( baseIOR[ 1 ] < iridescenceIOR ) phi23[ 1 ] = PI;\n\t\tif ( baseIOR[ 2 ] < iridescenceIOR ) phi23[ 2 ] = PI;\n\t\tfloat OPD = 2.0 * iridescenceIOR * thinFilmThickness * cosTheta2;\n\t\tvec3 phi = vec3( phi21 ) + phi23;\n\t\tvec3 R123 = clamp( R12 * R23, 1e-5, 0.9999 );\n\t\tvec3 r123 = sqrt( R123 );\n\t\tvec3 Rs = pow2( T121 ) * R23 / ( vec3( 1.0 ) - R123 );\n\t\tvec3 C0 = R12 + Rs;\n\t\tI = C0;\n\t\tvec3 Cm = Rs - T121;\n\t\tfor ( int m = 1; m <= 2; ++ m ) {\n\t\t\tCm *= r123;\n\t\t\tvec3 Sm = 2.0 * evalSensitivity( float( m ) * OPD, float( m ) * phi );\n\t\t\tI += Cm * Sm;\n\t\t}\n\t\treturn max( I, vec3( 0.0 ) );\n\t}\n#endif",bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vBumpMapUv );\n\t\tvec2 dSTdy = dFdy( vBumpMapUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vBumpMapUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\n\t\tvec3 vSigmaX = normalize( dFdx( surf_pos.xyz ) );\n\t\tvec3 vSigmaY = normalize( dFdy( surf_pos.xyz ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif",clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#ifdef ALPHA_TO_COVERAGE\n\t\tfloat distanceToPlane, distanceGradient;\n\t\tfloat clipOpacity = 1.0;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tdistanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\n\t\t\tdistanceGradient = fwidth( distanceToPlane ) / 2.0;\n\t\t\tclipOpacity *= smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\n\t\t\tif ( clipOpacity == 0.0 ) discard;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\t\tfloat unionClipOpacity = 1.0;\n\t\t\t#pragma unroll_loop_start\n\t\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\t\tplane = clippingPlanes[ i ];\n\t\t\t\tdistanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\n\t\t\t\tdistanceGradient = fwidth( distanceToPlane ) / 2.0;\n\t\t\t\tunionClipOpacity *= 1.0 - smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\n\t\t\t}\n\t\t\t#pragma unroll_loop_end\n\t\t\tclipOpacity *= 1.0 - unionClipOpacity;\n\t\t#endif\n\t\tdiffuseColor.a *= clipOpacity;\n\t\tif ( diffuseColor.a == 0.0 ) discard;\n\t#else\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\t\tbool clipped = true;\n\t\t\t#pragma unroll_loop_start\n\t\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\t\tplane = clippingPlanes[ i ];\n\t\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t\t}\n\t\t\t#pragma unroll_loop_end\n\t\t\tif ( clipped ) discard;\n\t\t#endif\n\t#endif\n#endif",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif",color_fragment:"#if defined( USE_COLOR_ALPHA )\n\tdiffuseColor *= vColor;\n#elif defined( USE_COLOR )\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR )\n\tvarying vec3 vColor;\n#endif",color_pars_vertex:"#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )\n\tvarying vec3 vColor;\n#endif",color_vertex:"#if defined( USE_COLOR_ALPHA )\n\tvColor = vec4( 1.0 );\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor *= color;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif\n#ifdef USE_BATCHING_COLOR\n\tvec3 batchingColor = getBatchingColor( getIndirectIndex( gl_DrawID ) );\n\tvColor.xyz *= batchingColor.xyz;\n#endif",common:"#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nvec3 pow2( const in vec3 x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\nfloat average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract( sin( sn ) * c );\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\n#ifdef USE_ALPHAHASH\n\tvarying vec3 vPosition;\n#endif\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}\nvec3 BRDF_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {\n\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n}\nfloat F_Schlick( const in float f0, const in float f90, const in float dotVH ) {\n\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n} // validated",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\thighp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tuv.x += filterInt * 3.0 * cubeUV_minTileSize;\n\t\tuv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize );\n\t\tuv.x *= CUBEUV_TEXEL_WIDTH;\n\t\tuv.y *= CUBEUV_TEXEL_HEIGHT;\n\t\t#ifdef texture2DGradEXT\n\t\t\treturn texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb;\n\t\t#else\n\t\t\treturn texture2D( envMap, uv ).rgb;\n\t\t#endif\n\t}\n\t#define cubeUV_r0 1.0\n\t#define cubeUV_m0 - 2.0\n\t#define cubeUV_r1 0.8\n\t#define cubeUV_m1 - 1.0\n\t#define cubeUV_r4 0.4\n\t#define cubeUV_m4 2.0\n\t#define cubeUV_r5 0.305\n\t#define cubeUV_m5 3.0\n\t#define cubeUV_r6 0.21\n\t#define cubeUV_m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= cubeUV_r1 ) {\n\t\t\tmip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0;\n\t\t} else if ( roughness >= cubeUV_r4 ) {\n\t\t\tmip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1;\n\t\t} else if ( roughness >= cubeUV_r5 ) {\n\t\t\tmip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4;\n\t\t} else if ( roughness >= cubeUV_r6 ) {\n\t\t\tmip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif",defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = objectTangent;\n#endif\n#ifdef USE_BATCHING\n\tmat3 bm = mat3( batchingMatrix );\n\ttransformedNormal /= vec3( dot( bm[ 0 ], bm[ 0 ] ), dot( bm[ 1 ], bm[ 1 ] ), dot( bm[ 2 ], bm[ 2 ] ) );\n\ttransformedNormal = bm * transformedNormal;\n\t#ifdef USE_TANGENT\n\t\ttransformedTangent = bm * transformedTangent;\n\t#endif\n#endif\n#ifdef USE_INSTANCING\n\tmat3 im = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( im[ 0 ], im[ 0 ] ), dot( im[ 1 ], im[ 1 ] ), dot( im[ 2 ], im[ 2 ] ) );\n\ttransformedNormal = im * transformedNormal;\n\t#ifdef USE_TANGENT\n\t\ttransformedTangent = im * transformedTangent;\n\t#endif\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\ttransformedTangent = ( modelViewMatrix * vec4( transformedTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv );\n\t#ifdef DECODE_VIDEO_TEXTURE_EMISSIVE\n\t\temissiveColor = sRGBTransferEOTF( emissiveColor );\n\t#endif\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",colorspace_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",colorspace_pars_fragment:"vec4 LinearTransferOETF( in vec4 value ) {\n\treturn value;\n}\nvec4 sRGBTransferEOTF( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 sRGBTransferOETF( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}",envmap_fragment:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, envMapRotation * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif",envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform mat3 envMapRotation;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif",envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif",envmap_physical_pars_fragment:"#ifdef USE_ENVMAP\n\tvec3 getIBLIrradiance( const in vec3 normal ) {\n\t\t#ifdef ENVMAP_TYPE_CUBE_UV\n\t\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, envMapRotation * worldNormal, 1.0 );\n\t\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\n\t\t#ifdef ENVMAP_TYPE_CUBE_UV\n\t\t\tvec3 reflectVec = reflect( - viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, envMapRotation * reflectVec, roughness );\n\t\t\treturn envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n\t#ifdef USE_ANISOTROPY\n\t\tvec3 getIBLAnisotropyRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in vec3 bitangent, const in float anisotropy ) {\n\t\t\t#ifdef ENVMAP_TYPE_CUBE_UV\n\t\t\t\tvec3 bentNormal = cross( bitangent, viewDir );\n\t\t\t\tbentNormal = normalize( cross( bentNormal, bitangent ) );\n\t\t\t\tbentNormal = normalize( mix( bentNormal, normal, pow2( pow2( 1.0 - anisotropy * ( 1.0 - roughness ) ) ) ) );\n\t\t\t\treturn getIBLRadiance( viewDir, bentNormal, roughness );\n\t\t\t#else\n\t\t\t\treturn vec3( 0.0 );\n\t\t\t#endif\n\t\t}\n\t#endif\n#endif",envmap_vertex:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif",fog_vertex:"#ifdef USE_FOG\n\tvFogDepth = - mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float vFogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float vFogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif",gradientmap_pars_fragment:"#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn vec3( texture2D( gradientMap, coord ).r );\n\t#else\n\t\tvec2 fw = fwidth( coord ) * 0.5;\n\t\treturn mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) );\n\t#endif\n}",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_fragment:"LambertMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularStrength = specularStrength;",lights_lambert_pars_fragment:"varying vec3 vViewPosition;\nstruct LambertMaterial {\n\tvec3 diffuseColor;\n\tfloat specularStrength;\n};\nvoid RE_Direct_Lambert( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Lambert\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Lambert",lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\n#if defined( USE_LIGHT_PROBES )\n\tuniform vec3 lightProbe[ 9 ];\n#endif\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\n\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\treturn irradiance;\n}\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\tif ( cutoffDistance > 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n}\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\n\treturn smoothstep( coneCosine, penumbraCosine, angleCosine );\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalLightInfo( const in DirectionalLight directionalLight, out IncidentLight light ) {\n\t\tlight.color = directionalLight.color;\n\t\tlight.direction = directionalLight.direction;\n\t\tlight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointLightInfo( const in PointLight pointLight, const in vec3 geometryPosition, out IncidentLight light ) {\n\t\tvec3 lVector = pointLight.position - geometryPosition;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tlight.color = pointLight.color;\n\t\tlight.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\n\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotLightInfo( const in SpotLight spotLight, const in vec3 geometryPosition, out IncidentLight light ) {\n\t\tvec3 lVector = spotLight.position - geometryPosition;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat angleCos = dot( light.direction, spotLight.direction );\n\t\tfloat spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\tif ( spotAttenuation > 0.0 ) {\n\t\t\tfloat lightDistance = length( lVector );\n\t\t\tlight.color = spotLight.color * spotAttenuation;\n\t\t\tlight.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t\t} else {\n\t\t\tlight.color = vec3( 0.0 );\n\t\t\tlight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\n\t\tfloat dotNL = dot( normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\treturn irradiance;\n\t}\n#endif",lights_toon_fragment:"ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;",lights_toon_pars_fragment:"varying vec3 vViewPosition;\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometryNormal, directLight.direction ) * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometryViewDir, geometryNormal, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( nonPerturbedNormal ) ), abs( dFdy( nonPerturbedNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;\nmaterial.roughness = min( material.roughness, 1.0 );\n#ifdef IOR\n\tmaterial.ior = ior;\n\t#ifdef USE_SPECULAR\n\t\tfloat specularIntensityFactor = specularIntensity;\n\t\tvec3 specularColorFactor = specularColor;\n\t\t#ifdef USE_SPECULAR_COLORMAP\n\t\t\tspecularColorFactor *= texture2D( specularColorMap, vSpecularColorMapUv ).rgb;\n\t\t#endif\n\t\t#ifdef USE_SPECULAR_INTENSITYMAP\n\t\t\tspecularIntensityFactor *= texture2D( specularIntensityMap, vSpecularIntensityMapUv ).a;\n\t\t#endif\n\t\tmaterial.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\n\t#else\n\t\tfloat specularIntensityFactor = 1.0;\n\t\tvec3 specularColorFactor = vec3( 1.0 );\n\t\tmaterial.specularF90 = 1.0;\n\t#endif\n\tmaterial.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.specularF90 = 1.0;\n#endif\n#ifdef USE_CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\tmaterial.clearcoatF0 = vec3( 0.04 );\n\tmaterial.clearcoatF90 = 1.0;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vClearcoatMapUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vClearcoatRoughnessMapUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_DISPERSION\n\tmaterial.dispersion = dispersion;\n#endif\n#ifdef USE_IRIDESCENCE\n\tmaterial.iridescence = iridescence;\n\tmaterial.iridescenceIOR = iridescenceIOR;\n\t#ifdef USE_IRIDESCENCEMAP\n\t\tmaterial.iridescence *= texture2D( iridescenceMap, vIridescenceMapUv ).r;\n\t#endif\n\t#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\t\tmaterial.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vIridescenceThicknessMapUv ).g + iridescenceThicknessMinimum;\n\t#else\n\t\tmaterial.iridescenceThickness = iridescenceThicknessMaximum;\n\t#endif\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheenColor;\n\t#ifdef USE_SHEEN_COLORMAP\n\t\tmaterial.sheenColor *= texture2D( sheenColorMap, vSheenColorMapUv ).rgb;\n\t#endif\n\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\n\t#ifdef USE_SHEEN_ROUGHNESSMAP\n\t\tmaterial.sheenRoughness *= texture2D( sheenRoughnessMap, vSheenRoughnessMapUv ).a;\n\t#endif\n#endif\n#ifdef USE_ANISOTROPY\n\t#ifdef USE_ANISOTROPYMAP\n\t\tmat2 anisotropyMat = mat2( anisotropyVector.x, anisotropyVector.y, - anisotropyVector.y, anisotropyVector.x );\n\t\tvec3 anisotropyPolar = texture2D( anisotropyMap, vAnisotropyMapUv ).rgb;\n\t\tvec2 anisotropyV = anisotropyMat * normalize( 2.0 * anisotropyPolar.rg - vec2( 1.0 ) ) * anisotropyPolar.b;\n\t#else\n\t\tvec2 anisotropyV = anisotropyVector;\n\t#endif\n\tmaterial.anisotropy = length( anisotropyV );\n\tif( material.anisotropy == 0.0 ) {\n\t\tanisotropyV = vec2( 1.0, 0.0 );\n\t} else {\n\t\tanisotropyV /= material.anisotropy;\n\t\tmaterial.anisotropy = saturate( material.anisotropy );\n\t}\n\tmaterial.alphaT = mix( pow2( material.roughness ), 1.0, pow2( material.anisotropy ) );\n\tmaterial.anisotropyT = tbn[ 0 ] * anisotropyV.x + tbn[ 1 ] * anisotropyV.y;\n\tmaterial.anisotropyB = tbn[ 1 ] * anisotropyV.x - tbn[ 0 ] * anisotropyV.y;\n#endif",lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat roughness;\n\tvec3 specularColor;\n\tfloat specularF90;\n\tfloat dispersion;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat clearcoat;\n\t\tfloat clearcoatRoughness;\n\t\tvec3 clearcoatF0;\n\t\tfloat clearcoatF90;\n\t#endif\n\t#ifdef USE_IRIDESCENCE\n\t\tfloat iridescence;\n\t\tfloat iridescenceIOR;\n\t\tfloat iridescenceThickness;\n\t\tvec3 iridescenceFresnel;\n\t\tvec3 iridescenceF0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tvec3 sheenColor;\n\t\tfloat sheenRoughness;\n\t#endif\n\t#ifdef IOR\n\t\tfloat ior;\n\t#endif\n\t#ifdef USE_TRANSMISSION\n\t\tfloat transmission;\n\t\tfloat transmissionAlpha;\n\t\tfloat thickness;\n\t\tfloat attenuationDistance;\n\t\tvec3 attenuationColor;\n\t#endif\n\t#ifdef USE_ANISOTROPY\n\t\tfloat anisotropy;\n\t\tfloat alphaT;\n\t\tvec3 anisotropyT;\n\t\tvec3 anisotropyB;\n\t#endif\n};\nvec3 clearcoatSpecularDirect = vec3( 0.0 );\nvec3 clearcoatSpecularIndirect = vec3( 0.0 );\nvec3 sheenSpecularDirect = vec3( 0.0 );\nvec3 sheenSpecularIndirect = vec3(0.0 );\nvec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH ) {\n float x = clamp( 1.0 - dotVH, 0.0, 1.0 );\n float x2 = x * x;\n float x5 = clamp( x * x2 * x2, 0.0, 0.9999 );\n return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 );\n}\nfloat V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\n#ifdef USE_ANISOTROPY\n\tfloat V_GGX_SmithCorrelated_Anisotropic( const in float alphaT, const in float alphaB, const in float dotTV, const in float dotBV, const in float dotTL, const in float dotBL, const in float dotNV, const in float dotNL ) {\n\t\tfloat gv = dotNL * length( vec3( alphaT * dotTV, alphaB * dotBV, dotNV ) );\n\t\tfloat gl = dotNV * length( vec3( alphaT * dotTL, alphaB * dotBL, dotNL ) );\n\t\tfloat v = 0.5 / ( gv + gl );\n\t\treturn saturate(v);\n\t}\n\tfloat D_GGX_Anisotropic( const in float alphaT, const in float alphaB, const in float dotNH, const in float dotTH, const in float dotBH ) {\n\t\tfloat a2 = alphaT * alphaB;\n\t\thighp vec3 v = vec3( alphaB * dotTH, alphaT * dotBH, a2 * dotNH );\n\t\thighp float v2 = dot( v, v );\n\t\tfloat w2 = a2 / v2;\n\t\treturn RECIPROCAL_PI * a2 * pow2 ( w2 );\n\t}\n#endif\n#ifdef USE_CLEARCOAT\n\tvec3 BRDF_GGX_Clearcoat( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material) {\n\t\tvec3 f0 = material.clearcoatF0;\n\t\tfloat f90 = material.clearcoatF90;\n\t\tfloat roughness = material.clearcoatRoughness;\n\t\tfloat alpha = pow2( roughness );\n\t\tvec3 halfDir = normalize( lightDir + viewDir );\n\t\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\t\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\t\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\t\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\t\tvec3 F = F_Schlick( f0, f90, dotVH );\n\t\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\t\tfloat D = D_GGX( alpha, dotNH );\n\t\treturn F * ( V * D );\n\t}\n#endif\nvec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material ) {\n\tvec3 f0 = material.specularColor;\n\tfloat f90 = material.specularF90;\n\tfloat roughness = material.roughness;\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\tvec3 F = F_Schlick( f0, f90, dotVH );\n\t#ifdef USE_IRIDESCENCE\n\t\tF = mix( F, material.iridescenceFresnel, material.iridescence );\n\t#endif\n\t#ifdef USE_ANISOTROPY\n\t\tfloat dotTL = dot( material.anisotropyT, lightDir );\n\t\tfloat dotTV = dot( material.anisotropyT, viewDir );\n\t\tfloat dotTH = dot( material.anisotropyT, halfDir );\n\t\tfloat dotBL = dot( material.anisotropyB, lightDir );\n\t\tfloat dotBV = dot( material.anisotropyB, viewDir );\n\t\tfloat dotBH = dot( material.anisotropyB, halfDir );\n\t\tfloat V = V_GGX_SmithCorrelated_Anisotropic( material.alphaT, alpha, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL );\n\t\tfloat D = D_GGX_Anisotropic( material.alphaT, alpha, dotNH, dotTH, dotBH );\n\t#else\n\t\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\t\tfloat D = D_GGX( alpha, dotNH );\n\t#endif\n\treturn F * ( V * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie( float roughness, float dotNH ) {\n\tfloat alpha = pow2( roughness );\n\tfloat invAlpha = 1.0 / alpha;\n\tfloat cos2h = dotNH * dotNH;\n\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 );\n\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\n}\nfloat V_Neubelt( float dotNV, float dotNL ) {\n\treturn saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\n}\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat D = D_Charlie( sheenRoughness, dotNH );\n\tfloat V = V_Neubelt( dotNV, dotNL );\n\treturn sheenColor * ( D * V );\n}\n#endif\nfloat IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat r2 = roughness * roughness;\n\tfloat a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95;\n\tfloat b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72;\n\tfloat DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) );\n\treturn saturate( DG * RECIPROCAL_PI );\n}\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\tvec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\n\treturn fab;\n}\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\treturn specularColor * fab.x + specularF90 * fab.y;\n}\n#ifdef USE_IRIDESCENCE\nvoid computeMultiscatteringIridescence( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float iridescence, const in vec3 iridescenceF0, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#else\nvoid computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#endif\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\t#ifdef USE_IRIDESCENCE\n\t\tvec3 Fr = mix( specularColor, iridescenceF0, iridescence );\n\t#else\n\t\tvec3 Fr = specularColor;\n\t#endif\n\tvec3 FssEss = Fr * fab.x + specularF90 * fab.y;\n\tfloat Ess = fab.x + fab.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometryNormal;\n\t\tvec3 viewDir = geometryViewDir;\n\t\tvec3 position = geometryPosition;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.roughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNLcc = saturate( dot( geometryClearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = dotNLcc * directLight.color;\n\t\tclearcoatSpecularDirect += ccIrradiance * BRDF_GGX_Clearcoat( directLight.direction, geometryViewDir, geometryClearcoatNormal, material );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecularDirect += irradiance * BRDF_Sheen( directLight.direction, geometryViewDir, geometryNormal, material.sheenColor, material.sheenRoughness );\n\t#endif\n\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometryViewDir, geometryNormal, material );\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatSpecularIndirect += clearcoatRadiance * EnvironmentBRDF( geometryClearcoatNormal, geometryViewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecularIndirect += irradiance * material.sheenColor * IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness );\n\t#endif\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\t#ifdef USE_IRIDESCENCE\n\t\tcomputeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering );\n\t#else\n\t\tcomputeMultiscattering( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\n\t#endif\n\tvec3 totalScattering = singleScattering + multiScattering;\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) );\n\treflectedLight.indirectSpecular += radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}",lights_fragment_begin:"\nvec3 geometryPosition = - vViewPosition;\nvec3 geometryNormal = normal;\nvec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\nvec3 geometryClearcoatNormal = vec3( 0.0 );\n#ifdef USE_CLEARCOAT\n\tgeometryClearcoatNormal = clearcoatNormal;\n#endif\n#ifdef USE_IRIDESCENCE\n\tfloat dotNVi = saturate( dot( normal, geometryViewDir ) );\n\tif ( material.iridescenceThickness == 0.0 ) {\n\t\tmaterial.iridescence = 0.0;\n\t} else {\n\t\tmaterial.iridescence = saturate( material.iridescence );\n\t}\n\tif ( material.iridescence > 0.0 ) {\n\t\tmaterial.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor );\n\t\tmaterial.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi );\n\t}\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointLightInfo( pointLight, geometryPosition, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowIntensity, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\tvec4 spotColor;\n\tvec3 spotLightCoord;\n\tbool inSpotLightMap;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotLightInfo( spotLight, geometryPosition, directLight );\n\t\t#if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n\t\t#define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX\n\t\t#elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\t#define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS\n\t\t#else\n\t\t#define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n\t\t#endif\n\t\t#if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS )\n\t\t\tspotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w;\n\t\t\tinSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) );\n\t\t\tspotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy );\n\t\t\tdirectLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color;\n\t\t#endif\n\t\t#undef SPOT_LIGHT_MAP_INDEX\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowIntensity, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalLightInfo( directionalLight, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowIntensity, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\t#if defined( USE_LIGHT_PROBES )\n\t\tirradiance += getLightProbeIrradiance( lightProbe, geometryNormal );\n\t#endif\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometryNormal );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif",lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n\t\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getIBLIrradiance( geometryNormal );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\t#ifdef USE_ANISOTROPY\n\t\tradiance += getIBLAnisotropyRadiance( geometryViewDir, geometryNormal, material.roughness, material.anisotropyB, material.anisotropy );\n\t#else\n\t\tradiance += getIBLRadiance( geometryViewDir, geometryNormal, material.roughness );\n\t#endif\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatRadiance += getIBLRadiance( geometryViewDir, geometryClearcoatNormal, material.clearcoatRoughness );\n\t#endif\n#endif",lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF )\n\tgl_FragDepth = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\tvFragDepth = 1.0 + gl_Position.w;\n\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n#endif",map_fragment:"#ifdef USE_MAP\n\tvec4 sampledDiffuseColor = texture2D( map, vMapUv );\n\t#ifdef DECODE_VIDEO_TEXTURE\n\t\tsampledDiffuseColor = sRGBTransferEOTF( sampledDiffuseColor );\n\t#endif\n\tdiffuseColor *= sampledDiffuseColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\t#if defined( USE_POINTS_UV )\n\t\tvec2 uv = vUv;\n\t#else\n\t\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n\t#endif\n#endif\n#ifdef USE_MAP\n\tdiffuseColor *= texture2D( map, uv );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif",map_particle_pars_fragment:"#if defined( USE_POINTS_UV )\n\tvarying vec2 vUv;\n#else\n\t#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\t\tuniform mat3 uvTransform;\n\t#endif\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphinstance_vertex:"#ifdef USE_INSTANCING_MORPH\n\tfloat morphTargetInfluences[ MORPHTARGETS_COUNT ];\n\tfloat morphTargetBaseInfluence = texelFetch( morphTexture, ivec2( 0, gl_InstanceID ), 0 ).r;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\tmorphTargetInfluences[i] = texelFetch( morphTexture, ivec2( i + 1, gl_InstanceID ), 0 ).r;\n\t}\n#endif",morphcolor_vertex:"#if defined( USE_MORPHCOLORS )\n\tvColor *= morphTargetBaseInfluence;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t#if defined( USE_COLOR_ALPHA )\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ];\n\t\t#elif defined( USE_COLOR )\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];\n\t\t#endif\n\t}\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\tif ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];\n\t}\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\t#ifndef USE_INSTANCING_MORPH\n\t\tuniform float morphTargetBaseInfluence;\n\t\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\n\t#endif\n\tuniform sampler2DArray morphTargetsTexture;\n\tuniform ivec2 morphTargetsTextureSize;\n\tvec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {\n\t\tint texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;\n\t\tint y = texelIndex / morphTargetsTextureSize.x;\n\t\tint x = texelIndex - y * morphTargetsTextureSize.x;\n\t\tivec3 morphUV = ivec3( x, y, morphTargetIndex );\n\t\treturn texelFetch( morphTargetsTexture, morphUV, 0 );\n\t}\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\tif ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];\n\t}\n#endif",normal_fragment_begin:"float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n#ifdef FLAT_SHADED\n\tvec3 fdx = dFdx( vViewPosition );\n\tvec3 fdy = dFdy( vViewPosition );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal *= faceDirection;\n\t#endif\n#endif\n#if defined( USE_NORMALMAP_TANGENTSPACE ) || defined( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY )\n\t#ifdef USE_TANGENT\n\t\tmat3 tbn = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\n\t#else\n\t\tmat3 tbn = getTangentFrame( - vViewPosition, normal,\n\t\t#if defined( USE_NORMALMAP )\n\t\t\tvNormalMapUv\n\t\t#elif defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tvClearcoatNormalMapUv\n\t\t#else\n\t\t\tvUv\n\t\t#endif\n\t\t);\n\t#endif\n\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\n\t\ttbn[0] *= faceDirection;\n\t\ttbn[1] *= faceDirection;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\t#ifdef USE_TANGENT\n\t\tmat3 tbn2 = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\n\t#else\n\t\tmat3 tbn2 = getTangentFrame( - vViewPosition, normal, vClearcoatNormalMapUv );\n\t#endif\n\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\n\t\ttbn2[0] *= faceDirection;\n\t\ttbn2[1] *= faceDirection;\n\t#endif\n#endif\nvec3 nonPerturbedNormal = normal;",normal_fragment_maps:"#ifdef USE_NORMALMAP_OBJECTSPACE\n\tnormal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( USE_NORMALMAP_TANGENTSPACE )\n\tvec3 mapN = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\tnormal = normalize( tbn * mapN );\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\n#endif",normal_pars_fragment:"#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif",normal_pars_vertex:"#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif",normal_vertex:"#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef USE_NORMALMAP_OBJECTSPACE\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( USE_NORMALMAP_TANGENTSPACE ) || defined ( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY ) )\n\tmat3 getTangentFrame( vec3 eye_pos, vec3 surf_norm, vec2 uv ) {\n\t\tvec3 q0 = dFdx( eye_pos.xyz );\n\t\tvec3 q1 = dFdy( eye_pos.xyz );\n\t\tvec2 st0 = dFdx( uv.st );\n\t\tvec2 st1 = dFdy( uv.st );\n\t\tvec3 N = surf_norm;\n\t\tvec3 q1perp = cross( q1, N );\n\t\tvec3 q0perp = cross( N, q0 );\n\t\tvec3 T = q1perp * st0.x + q0perp * st1.x;\n\t\tvec3 B = q1perp * st0.y + q0perp * st1.y;\n\t\tfloat det = max( dot( T, T ), dot( B, B ) );\n\t\tfloat scale = ( det == 0.0 ) ? 0.0 : inversesqrt( det );\n\t\treturn mat3( T * scale, B * scale, N );\n\t}\n#endif",clearcoat_normal_fragment_begin:"#ifdef USE_CLEARCOAT\n\tvec3 clearcoatNormal = nonPerturbedNormal;\n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\tclearcoatNormal = normalize( tbn2 * clearcoatMapN );\n#endif",clearcoat_pars_fragment:"#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif",iridescence_pars_fragment:"#ifdef USE_IRIDESCENCEMAP\n\tuniform sampler2D iridescenceMap;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tuniform sampler2D iridescenceThicknessMap;\n#endif",opaque_fragment:"#ifdef OPAQUE\ndiffuseColor.a = 1.0;\n#endif\n#ifdef USE_TRANSMISSION\ndiffuseColor.a *= material.transmissionAlpha;\n#endif\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );",packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;const float ShiftRight8 = 1. / 256.;\nconst float Inv255 = 1. / 255.;\nconst vec4 PackFactors = vec4( 1.0, 256.0, 256.0 * 256.0, 256.0 * 256.0 * 256.0 );\nconst vec2 UnpackFactors2 = vec2( UnpackDownscale, 1.0 / PackFactors.g );\nconst vec3 UnpackFactors3 = vec3( UnpackDownscale / PackFactors.rg, 1.0 / PackFactors.b );\nconst vec4 UnpackFactors4 = vec4( UnpackDownscale / PackFactors.rgb, 1.0 / PackFactors.a );\nvec4 packDepthToRGBA( const in float v ) {\n\tif( v <= 0.0 )\n\t\treturn vec4( 0., 0., 0., 0. );\n\tif( v >= 1.0 )\n\t\treturn vec4( 1., 1., 1., 1. );\n\tfloat vuf;\n\tfloat af = modf( v * PackFactors.a, vuf );\n\tfloat bf = modf( vuf * ShiftRight8, vuf );\n\tfloat gf = modf( vuf * ShiftRight8, vuf );\n\treturn vec4( vuf * Inv255, gf * PackUpscale, bf * PackUpscale, af );\n}\nvec3 packDepthToRGB( const in float v ) {\n\tif( v <= 0.0 )\n\t\treturn vec3( 0., 0., 0. );\n\tif( v >= 1.0 )\n\t\treturn vec3( 1., 1., 1. );\n\tfloat vuf;\n\tfloat bf = modf( v * PackFactors.b, vuf );\n\tfloat gf = modf( vuf * ShiftRight8, vuf );\n\treturn vec3( vuf * Inv255, gf * PackUpscale, bf );\n}\nvec2 packDepthToRG( const in float v ) {\n\tif( v <= 0.0 )\n\t\treturn vec2( 0., 0. );\n\tif( v >= 1.0 )\n\t\treturn vec2( 1., 1. );\n\tfloat vuf;\n\tfloat gf = modf( v * 256., vuf );\n\treturn vec2( vuf * Inv255, gf );\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors4 );\n}\nfloat unpackRGBToDepth( const in vec3 v ) {\n\treturn dot( v, UnpackFactors3 );\n}\nfloat unpackRGToDepth( const in vec2 v ) {\n\treturn v.r * UnpackFactors2.r + v.g * UnpackFactors2.g;\n}\nvec4 pack2HalfToRGBA( const in vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\n}\nvec2 unpackRGBATo2Half( const in vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float depth, const in float near, const in float far ) {\n\treturn depth * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float depth, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * depth - far );\n}",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_BATCHING\n\tmvPosition = batchingMatrix * mvPosition;\n#endif\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",dithering_pars_fragment:"#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#if NUM_SPOT_LIGHT_COORDS > 0\n\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#if NUM_SPOT_LIGHT_MAPS > 0\n\tuniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ];\n#endif\n#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\tfloat depth = unpackRGBAToDepth( texture2D( depths, uv ) );\n\t\t#ifdef USE_REVERSEDEPTHBUF\n\t\t\treturn step( depth, compare );\n\t\t#else\n\t\t\treturn step( compare, depth );\n\t\t#endif\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\t#ifdef USE_REVERSEDEPTHBUF\n\t\t\tfloat hard_shadow = step( distribution.x, compare );\n\t\t#else\n\t\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\t#endif\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\n\t\tbool frustumTest = inFrustum && shadowCoord.z <= 1.0;\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn mix( 1.0, shadow, shadowIntensity );\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tfloat shadow = 1.0;\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\t\n\t\tfloat lightToPositionLength = length( lightToPosition );\n\t\tif ( lightToPositionLength - shadowCameraFar <= 0.0 && lightToPositionLength - shadowCameraNear >= 0.0 ) {\n\t\t\tfloat dp = ( lightToPositionLength - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\t\tdp += shadowBias;\n\t\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\t\tshadow = (\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t\t) * ( 1.0 / 9.0 );\n\t\t\t#else\n\t\t\t\tshadow = texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t\t#endif\n\t\t}\n\t\treturn mix( 1.0, shadow, shadowIntensity );\n\t}\n#endif",shadowmap_pars_vertex:"#if NUM_SPOT_LIGHT_COORDS > 0\n\tuniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ];\n\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif",shadowmap_vertex:"#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 )\n\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\tvec4 shadowWorldPosition;\n#endif\n#if defined( USE_SHADOWMAP )\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if NUM_SPOT_LIGHT_COORDS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition;\n\t\t#if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\t\tshadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias;\n\t\t#endif\n\t\tvSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n#endif",shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowIntensity, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowIntensity, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowIntensity, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}",skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\tuniform highp sampler2D boneTexture;\n\tmat4 getBoneMatrix( const in float i ) {\n\t\tint size = textureSize( boneTexture, 0 ).x;\n\t\tint j = int( i ) * 4;\n\t\tint x = j % size;\n\t\tint y = j / size;\n\t\tvec4 v1 = texelFetch( boneTexture, ivec2( x, y ), 0 );\n\t\tvec4 v2 = texelFetch( boneTexture, ivec2( x + 1, y ), 0 );\n\t\tvec4 v3 = texelFetch( boneTexture, ivec2( x + 2, y ), 0 );\n\t\tvec4 v4 = texelFetch( boneTexture, ivec2( x + 3, y ), 0 );\n\t\treturn mat4( v1, v2, v3, v4 );\n\t}\n#endif",skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vSpecularMapUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",tonemapping_pars_fragment:"#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn saturate( toneMappingExposure * color );\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 CineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nconst mat3 LINEAR_REC2020_TO_LINEAR_SRGB = mat3(\n\tvec3( 1.6605, - 0.1246, - 0.0182 ),\n\tvec3( - 0.5876, 1.1329, - 0.1006 ),\n\tvec3( - 0.0728, - 0.0083, 1.1187 )\n);\nconst mat3 LINEAR_SRGB_TO_LINEAR_REC2020 = mat3(\n\tvec3( 0.6274, 0.0691, 0.0164 ),\n\tvec3( 0.3293, 0.9195, 0.0880 ),\n\tvec3( 0.0433, 0.0113, 0.8956 )\n);\nvec3 agxDefaultContrastApprox( vec3 x ) {\n\tvec3 x2 = x * x;\n\tvec3 x4 = x2 * x2;\n\treturn + 15.5 * x4 * x2\n\t\t- 40.14 * x4 * x\n\t\t+ 31.96 * x4\n\t\t- 6.868 * x2 * x\n\t\t+ 0.4298 * x2\n\t\t+ 0.1191 * x\n\t\t- 0.00232;\n}\nvec3 AgXToneMapping( vec3 color ) {\n\tconst mat3 AgXInsetMatrix = mat3(\n\t\tvec3( 0.856627153315983, 0.137318972929847, 0.11189821299995 ),\n\t\tvec3( 0.0951212405381588, 0.761241990602591, 0.0767994186031903 ),\n\t\tvec3( 0.0482516061458583, 0.101439036467562, 0.811302368396859 )\n\t);\n\tconst mat3 AgXOutsetMatrix = mat3(\n\t\tvec3( 1.1271005818144368, - 0.1413297634984383, - 0.14132976349843826 ),\n\t\tvec3( - 0.11060664309660323, 1.157823702216272, - 0.11060664309660294 ),\n\t\tvec3( - 0.016493938717834573, - 0.016493938717834257, 1.2519364065950405 )\n\t);\n\tconst float AgxMinEv = - 12.47393;\tconst float AgxMaxEv = 4.026069;\n\tcolor *= toneMappingExposure;\n\tcolor = LINEAR_SRGB_TO_LINEAR_REC2020 * color;\n\tcolor = AgXInsetMatrix * color;\n\tcolor = max( color, 1e-10 );\tcolor = log2( color );\n\tcolor = ( color - AgxMinEv ) / ( AgxMaxEv - AgxMinEv );\n\tcolor = clamp( color, 0.0, 1.0 );\n\tcolor = agxDefaultContrastApprox( color );\n\tcolor = AgXOutsetMatrix * color;\n\tcolor = pow( max( vec3( 0.0 ), color ), vec3( 2.2 ) );\n\tcolor = LINEAR_REC2020_TO_LINEAR_SRGB * color;\n\tcolor = clamp( color, 0.0, 1.0 );\n\treturn color;\n}\nvec3 NeutralToneMapping( vec3 color ) {\n\tconst float StartCompression = 0.8 - 0.04;\n\tconst float Desaturation = 0.15;\n\tcolor *= toneMappingExposure;\n\tfloat x = min( color.r, min( color.g, color.b ) );\n\tfloat offset = x < 0.08 ? x - 6.25 * x * x : 0.04;\n\tcolor -= offset;\n\tfloat peak = max( color.r, max( color.g, color.b ) );\n\tif ( peak < StartCompression ) return color;\n\tfloat d = 1. - StartCompression;\n\tfloat newPeak = 1. - d * d / ( peak + d - StartCompression );\n\tcolor *= newPeak / peak;\n\tfloat g = 1. - 1. / ( Desaturation * ( peak - newPeak ) + 1. );\n\treturn mix( color, vec3( newPeak ), g );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }",transmission_fragment:"#ifdef USE_TRANSMISSION\n\tmaterial.transmission = transmission;\n\tmaterial.transmissionAlpha = 1.0;\n\tmaterial.thickness = thickness;\n\tmaterial.attenuationDistance = attenuationDistance;\n\tmaterial.attenuationColor = attenuationColor;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\tmaterial.transmission *= texture2D( transmissionMap, vTransmissionMapUv ).r;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tmaterial.thickness *= texture2D( thicknessMap, vThicknessMapUv ).g;\n\t#endif\n\tvec3 pos = vWorldPosition;\n\tvec3 v = normalize( cameraPosition - pos );\n\tvec3 n = inverseTransformDirection( normal, viewMatrix );\n\tvec4 transmitted = getIBLVolumeRefraction(\n\t\tn, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,\n\t\tpos, modelMatrix, viewMatrix, projectionMatrix, material.dispersion, material.ior, material.thickness,\n\t\tmaterial.attenuationColor, material.attenuationDistance );\n\tmaterial.transmissionAlpha = mix( material.transmissionAlpha, transmitted.a, material.transmission );\n\ttotalDiffuse = mix( totalDiffuse, transmitted.rgb, material.transmission );\n#endif",transmission_pars_fragment:"#ifdef USE_TRANSMISSION\n\tuniform float transmission;\n\tuniform float thickness;\n\tuniform float attenuationDistance;\n\tuniform vec3 attenuationColor;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\tuniform sampler2D transmissionMap;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tuniform sampler2D thicknessMap;\n\t#endif\n\tuniform vec2 transmissionSamplerSize;\n\tuniform sampler2D transmissionSamplerMap;\n\tuniform mat4 modelMatrix;\n\tuniform mat4 projectionMatrix;\n\tvarying vec3 vWorldPosition;\n\tfloat w0( float a ) {\n\t\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - a + 3.0 ) - 3.0 ) + 1.0 );\n\t}\n\tfloat w1( float a ) {\n\t\treturn ( 1.0 / 6.0 ) * ( a * a * ( 3.0 * a - 6.0 ) + 4.0 );\n\t}\n\tfloat w2( float a ){\n\t\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - 3.0 * a + 3.0 ) + 3.0 ) + 1.0 );\n\t}\n\tfloat w3( float a ) {\n\t\treturn ( 1.0 / 6.0 ) * ( a * a * a );\n\t}\n\tfloat g0( float a ) {\n\t\treturn w0( a ) + w1( a );\n\t}\n\tfloat g1( float a ) {\n\t\treturn w2( a ) + w3( a );\n\t}\n\tfloat h0( float a ) {\n\t\treturn - 1.0 + w1( a ) / ( w0( a ) + w1( a ) );\n\t}\n\tfloat h1( float a ) {\n\t\treturn 1.0 + w3( a ) / ( w2( a ) + w3( a ) );\n\t}\n\tvec4 bicubic( sampler2D tex, vec2 uv, vec4 texelSize, float lod ) {\n\t\tuv = uv * texelSize.zw + 0.5;\n\t\tvec2 iuv = floor( uv );\n\t\tvec2 fuv = fract( uv );\n\t\tfloat g0x = g0( fuv.x );\n\t\tfloat g1x = g1( fuv.x );\n\t\tfloat h0x = h0( fuv.x );\n\t\tfloat h1x = h1( fuv.x );\n\t\tfloat h0y = h0( fuv.y );\n\t\tfloat h1y = h1( fuv.y );\n\t\tvec2 p0 = ( vec2( iuv.x + h0x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\n\t\tvec2 p1 = ( vec2( iuv.x + h1x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\n\t\tvec2 p2 = ( vec2( iuv.x + h0x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\n\t\tvec2 p3 = ( vec2( iuv.x + h1x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\n\t\treturn g0( fuv.y ) * ( g0x * textureLod( tex, p0, lod ) + g1x * textureLod( tex, p1, lod ) ) +\n\t\t\tg1( fuv.y ) * ( g0x * textureLod( tex, p2, lod ) + g1x * textureLod( tex, p3, lod ) );\n\t}\n\tvec4 textureBicubic( sampler2D sampler, vec2 uv, float lod ) {\n\t\tvec2 fLodSize = vec2( textureSize( sampler, int( lod ) ) );\n\t\tvec2 cLodSize = vec2( textureSize( sampler, int( lod + 1.0 ) ) );\n\t\tvec2 fLodSizeInv = 1.0 / fLodSize;\n\t\tvec2 cLodSizeInv = 1.0 / cLodSize;\n\t\tvec4 fSample = bicubic( sampler, uv, vec4( fLodSizeInv, fLodSize ), floor( lod ) );\n\t\tvec4 cSample = bicubic( sampler, uv, vec4( cLodSizeInv, cLodSize ), ceil( lod ) );\n\t\treturn mix( fSample, cSample, fract( lod ) );\n\t}\n\tvec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {\n\t\tvec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\n\t\tvec3 modelScale;\n\t\tmodelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\n\t\tmodelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\n\t\tmodelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\n\t\treturn normalize( refractionVector ) * thickness * modelScale;\n\t}\n\tfloat applyIorToRoughness( const in float roughness, const in float ior ) {\n\t\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\n\t}\n\tvec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {\n\t\tfloat lod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\n\t\treturn textureBicubic( transmissionSamplerMap, fragCoord.xy, lod );\n\t}\n\tvec3 volumeAttenuation( const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {\n\t\tif ( isinf( attenuationDistance ) ) {\n\t\t\treturn vec3( 1.0 );\n\t\t} else {\n\t\t\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\n\t\t\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance );\t\t\treturn transmittance;\n\t\t}\n\t}\n\tvec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,\n\t\tconst in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,\n\t\tconst in mat4 viewMatrix, const in mat4 projMatrix, const in float dispersion, const in float ior, const in float thickness,\n\t\tconst in vec3 attenuationColor, const in float attenuationDistance ) {\n\t\tvec4 transmittedLight;\n\t\tvec3 transmittance;\n\t\t#ifdef USE_DISPERSION\n\t\t\tfloat halfSpread = ( ior - 1.0 ) * 0.025 * dispersion;\n\t\t\tvec3 iors = vec3( ior - halfSpread, ior, ior + halfSpread );\n\t\t\tfor ( int i = 0; i < 3; i ++ ) {\n\t\t\t\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, iors[ i ], modelMatrix );\n\t\t\t\tvec3 refractedRayExit = position + transmissionRay;\n\t\t\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n\t\t\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\t\t\trefractionCoords += 1.0;\n\t\t\t\trefractionCoords /= 2.0;\n\t\t\t\tvec4 transmissionSample = getTransmissionSample( refractionCoords, roughness, iors[ i ] );\n\t\t\t\ttransmittedLight[ i ] = transmissionSample[ i ];\n\t\t\t\ttransmittedLight.a += transmissionSample.a;\n\t\t\t\ttransmittance[ i ] = diffuseColor[ i ] * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance )[ i ];\n\t\t\t}\n\t\t\ttransmittedLight.a /= 3.0;\n\t\t#else\n\t\t\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\n\t\t\tvec3 refractedRayExit = position + transmissionRay;\n\t\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n\t\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\t\trefractionCoords += 1.0;\n\t\t\trefractionCoords /= 2.0;\n\t\t\ttransmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\n\t\t\ttransmittance = diffuseColor * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance );\n\t\t#endif\n\t\tvec3 attenuatedColor = transmittance * transmittedLight.rgb;\n\t\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\n\t\tfloat transmittanceFactor = ( transmittance.r + transmittance.g + transmittance.b ) / 3.0;\n\t\treturn vec4( ( 1.0 - F ) * attenuatedColor, 1.0 - ( 1.0 - transmittedLight.a ) * transmittanceFactor );\n\t}\n#endif",uv_pars_fragment:"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n\tvarying vec2 vUv;\n#endif\n#ifdef USE_MAP\n\tvarying vec2 vMapUv;\n#endif\n#ifdef USE_ALPHAMAP\n\tvarying vec2 vAlphaMapUv;\n#endif\n#ifdef USE_LIGHTMAP\n\tvarying vec2 vLightMapUv;\n#endif\n#ifdef USE_AOMAP\n\tvarying vec2 vAoMapUv;\n#endif\n#ifdef USE_BUMPMAP\n\tvarying vec2 vBumpMapUv;\n#endif\n#ifdef USE_NORMALMAP\n\tvarying vec2 vNormalMapUv;\n#endif\n#ifdef USE_EMISSIVEMAP\n\tvarying vec2 vEmissiveMapUv;\n#endif\n#ifdef USE_METALNESSMAP\n\tvarying vec2 vMetalnessMapUv;\n#endif\n#ifdef USE_ROUGHNESSMAP\n\tvarying vec2 vRoughnessMapUv;\n#endif\n#ifdef USE_ANISOTROPYMAP\n\tvarying vec2 vAnisotropyMapUv;\n#endif\n#ifdef USE_CLEARCOATMAP\n\tvarying vec2 vClearcoatMapUv;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tvarying vec2 vClearcoatNormalMapUv;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tvarying vec2 vClearcoatRoughnessMapUv;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n\tvarying vec2 vIridescenceMapUv;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tvarying vec2 vIridescenceThicknessMapUv;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n\tvarying vec2 vSheenColorMapUv;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n\tvarying vec2 vSheenRoughnessMapUv;\n#endif\n#ifdef USE_SPECULARMAP\n\tvarying vec2 vSpecularMapUv;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n\tvarying vec2 vSpecularColorMapUv;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n\tvarying vec2 vSpecularIntensityMapUv;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n\tuniform mat3 transmissionMapTransform;\n\tvarying vec2 vTransmissionMapUv;\n#endif\n#ifdef USE_THICKNESSMAP\n\tuniform mat3 thicknessMapTransform;\n\tvarying vec2 vThicknessMapUv;\n#endif",uv_pars_vertex:"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n\tvarying vec2 vUv;\n#endif\n#ifdef USE_MAP\n\tuniform mat3 mapTransform;\n\tvarying vec2 vMapUv;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform mat3 alphaMapTransform;\n\tvarying vec2 vAlphaMapUv;\n#endif\n#ifdef USE_LIGHTMAP\n\tuniform mat3 lightMapTransform;\n\tvarying vec2 vLightMapUv;\n#endif\n#ifdef USE_AOMAP\n\tuniform mat3 aoMapTransform;\n\tvarying vec2 vAoMapUv;\n#endif\n#ifdef USE_BUMPMAP\n\tuniform mat3 bumpMapTransform;\n\tvarying vec2 vBumpMapUv;\n#endif\n#ifdef USE_NORMALMAP\n\tuniform mat3 normalMapTransform;\n\tvarying vec2 vNormalMapUv;\n#endif\n#ifdef USE_DISPLACEMENTMAP\n\tuniform mat3 displacementMapTransform;\n\tvarying vec2 vDisplacementMapUv;\n#endif\n#ifdef USE_EMISSIVEMAP\n\tuniform mat3 emissiveMapTransform;\n\tvarying vec2 vEmissiveMapUv;\n#endif\n#ifdef USE_METALNESSMAP\n\tuniform mat3 metalnessMapTransform;\n\tvarying vec2 vMetalnessMapUv;\n#endif\n#ifdef USE_ROUGHNESSMAP\n\tuniform mat3 roughnessMapTransform;\n\tvarying vec2 vRoughnessMapUv;\n#endif\n#ifdef USE_ANISOTROPYMAP\n\tuniform mat3 anisotropyMapTransform;\n\tvarying vec2 vAnisotropyMapUv;\n#endif\n#ifdef USE_CLEARCOATMAP\n\tuniform mat3 clearcoatMapTransform;\n\tvarying vec2 vClearcoatMapUv;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform mat3 clearcoatNormalMapTransform;\n\tvarying vec2 vClearcoatNormalMapUv;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform mat3 clearcoatRoughnessMapTransform;\n\tvarying vec2 vClearcoatRoughnessMapUv;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n\tuniform mat3 sheenColorMapTransform;\n\tvarying vec2 vSheenColorMapUv;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n\tuniform mat3 sheenRoughnessMapTransform;\n\tvarying vec2 vSheenRoughnessMapUv;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n\tuniform mat3 iridescenceMapTransform;\n\tvarying vec2 vIridescenceMapUv;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tuniform mat3 iridescenceThicknessMapTransform;\n\tvarying vec2 vIridescenceThicknessMapUv;\n#endif\n#ifdef USE_SPECULARMAP\n\tuniform mat3 specularMapTransform;\n\tvarying vec2 vSpecularMapUv;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n\tuniform mat3 specularColorMapTransform;\n\tvarying vec2 vSpecularColorMapUv;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n\tuniform mat3 specularIntensityMapTransform;\n\tvarying vec2 vSpecularIntensityMapUv;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n\tuniform mat3 transmissionMapTransform;\n\tvarying vec2 vTransmissionMapUv;\n#endif\n#ifdef USE_THICKNESSMAP\n\tuniform mat3 thicknessMapTransform;\n\tvarying vec2 vThicknessMapUv;\n#endif",uv_vertex:"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n\tvUv = vec3( uv, 1 ).xy;\n#endif\n#ifdef USE_MAP\n\tvMapUv = ( mapTransform * vec3( MAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ALPHAMAP\n\tvAlphaMapUv = ( alphaMapTransform * vec3( ALPHAMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_LIGHTMAP\n\tvLightMapUv = ( lightMapTransform * vec3( LIGHTMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_AOMAP\n\tvAoMapUv = ( aoMapTransform * vec3( AOMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_BUMPMAP\n\tvBumpMapUv = ( bumpMapTransform * vec3( BUMPMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_NORMALMAP\n\tvNormalMapUv = ( normalMapTransform * vec3( NORMALMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_DISPLACEMENTMAP\n\tvDisplacementMapUv = ( displacementMapTransform * vec3( DISPLACEMENTMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_EMISSIVEMAP\n\tvEmissiveMapUv = ( emissiveMapTransform * vec3( EMISSIVEMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_METALNESSMAP\n\tvMetalnessMapUv = ( metalnessMapTransform * vec3( METALNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ROUGHNESSMAP\n\tvRoughnessMapUv = ( roughnessMapTransform * vec3( ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ANISOTROPYMAP\n\tvAnisotropyMapUv = ( anisotropyMapTransform * vec3( ANISOTROPYMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOATMAP\n\tvClearcoatMapUv = ( clearcoatMapTransform * vec3( CLEARCOATMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tvClearcoatNormalMapUv = ( clearcoatNormalMapTransform * vec3( CLEARCOAT_NORMALMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tvClearcoatRoughnessMapUv = ( clearcoatRoughnessMapTransform * vec3( CLEARCOAT_ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n\tvIridescenceMapUv = ( iridescenceMapTransform * vec3( IRIDESCENCEMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tvIridescenceThicknessMapUv = ( iridescenceThicknessMapTransform * vec3( IRIDESCENCE_THICKNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n\tvSheenColorMapUv = ( sheenColorMapTransform * vec3( SHEEN_COLORMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n\tvSheenRoughnessMapUv = ( sheenRoughnessMapTransform * vec3( SHEEN_ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULARMAP\n\tvSpecularMapUv = ( specularMapTransform * vec3( SPECULARMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n\tvSpecularColorMapUv = ( specularColorMapTransform * vec3( SPECULAR_COLORMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n\tvSpecularIntensityMapUv = ( specularIntensityMapTransform * vec3( SPECULAR_INTENSITYMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n\tvTransmissionMapUv = ( transmissionMapTransform * vec3( TRANSMISSIONMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_THICKNESSMAP\n\tvThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_BATCHING\n\t\tworldPosition = batchingMatrix * worldPosition;\n\t#endif\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif",background_vert:"varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}",background_frag:"uniform sampler2D t2D;\nuniform float backgroundIntensity;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\t#ifdef DECODE_VIDEO_TEXTURE\n\t\ttexColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w );\n\t#endif\n\ttexColor.rgb *= backgroundIntensity;\n\tgl_FragColor = texColor;\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n}",backgroundCube_vert:"varying vec3 vWorldDirection;\n#include <common>\nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include <begin_vertex>\n\t#include <project_vertex>\n\tgl_Position.z = gl_Position.w;\n}",backgroundCube_frag:"#ifdef ENVMAP_TYPE_CUBE\n\tuniform samplerCube envMap;\n#elif defined( ENVMAP_TYPE_CUBE_UV )\n\tuniform sampler2D envMap;\n#endif\nuniform float flipEnvMap;\nuniform float backgroundBlurriness;\nuniform float backgroundIntensity;\nuniform mat3 backgroundRotation;\nvarying vec3 vWorldDirection;\n#include <cube_uv_reflection_fragment>\nvoid main() {\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 texColor = textureCube( envMap, backgroundRotation * vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 texColor = textureCubeUV( envMap, backgroundRotation * vWorldDirection, backgroundBlurriness );\n\t#else\n\t\tvec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t#endif\n\ttexColor.rgb *= backgroundIntensity;\n\tgl_FragColor = texColor;\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n}",cube_vert:"varying vec3 vWorldDirection;\n#include <common>\nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include <begin_vertex>\n\t#include <project_vertex>\n\tgl_Position.z = gl_Position.w;\n}",cube_frag:"uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldDirection;\nvoid main() {\n\tvec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );\n\tgl_FragColor = texColor;\n\tgl_FragColor.a *= opacity;\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n}",depth_vert:"#include <common>\n#include <batching_pars_vertex>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include <uv_vertex>\n\t#include <batching_vertex>\n\t#include <skinbase_vertex>\n\t#include <morphinstance_vertex>\n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvHighPrecisionZW = gl_Position.zw;\n}",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include <common>\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <alphahash_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include <clipping_planes_fragment>\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <alphahash_fragment>\n\t#include <logdepthbuf_fragment>\n\t#ifdef USE_REVERSEDEPTHBUF\n\t\tfloat fragCoordZ = vHighPrecisionZW[ 0 ] / vHighPrecisionZW[ 1 ];\n\t#else\n\t\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[ 0 ] / vHighPrecisionZW[ 1 ] + 0.5;\n\t#endif\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#elif DEPTH_PACKING == 3202\n\t\tgl_FragColor = vec4( packDepthToRGB( fragCoordZ ), 1.0 );\n\t#elif DEPTH_PACKING == 3203\n\t\tgl_FragColor = vec4( packDepthToRG( fragCoordZ ), 0.0, 1.0 );\n\t#endif\n}",distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include <common>\n#include <batching_pars_vertex>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <batching_vertex>\n\t#include <skinbase_vertex>\n\t#include <morphinstance_vertex>\n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <worldpos_vertex>\n\t#include <clipping_planes_vertex>\n\tvWorldPosition = worldPosition.xyz;\n}",distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include <common>\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <alphahash_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main () {\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include <clipping_planes_fragment>\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <alphahash_fragment>\n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}",equirect_vert:"varying vec3 vWorldDirection;\n#include <common>\nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include <begin_vertex>\n\t#include <project_vertex>\n}",equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include <common>\nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n}",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include <common>\n#include <uv_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include <uv_vertex>\n\t#include <color_vertex>\n\t#include <morphinstance_vertex>\n\t#include <morphcolor_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <fog_vertex>\n}",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include <common>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <fog_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <clipping_planes_fragment>\n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\toutgoingLight = diffuseColor.rgb;\n\t#include <opaque_fragment>\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n}",meshbasic_vert:"#include <common>\n#include <batching_pars_vertex>\n#include <uv_pars_vertex>\n#include <envmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <color_vertex>\n\t#include <morphinstance_vertex>\n\t#include <morphcolor_vertex>\n\t#include <batching_vertex>\n\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\n\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinbase_vertex>\n\t\t#include <skinnormal_vertex>\n\t\t#include <defaultnormal_vertex>\n\t#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <worldpos_vertex>\n\t#include <envmap_vertex>\n\t#include <fog_vertex>\n}",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <common>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <alphahash_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <envmap_common_pars_fragment>\n#include <envmap_pars_fragment>\n#include <fog_pars_fragment>\n#include <specularmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <clipping_planes_fragment>\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <alphahash_fragment>\n\t#include <specularmap_fragment>\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n\t\treflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include <aomap_fragment>\n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include <envmap_fragment>\n\t#include <opaque_fragment>\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}",meshlambert_vert:"#define LAMBERT\nvarying vec3 vViewPosition;\n#include <common>\n#include <batching_pars_vertex>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <envmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <normal_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <color_vertex>\n\t#include <morphinstance_vertex>\n\t#include <morphcolor_vertex>\n\t#include <batching_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <normal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <envmap_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}",meshlambert_frag:"#define LAMBERT\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include <common>\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <alphahash_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <envmap_common_pars_fragment>\n#include <envmap_pars_fragment>\n#include <fog_pars_fragment>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <normal_pars_fragment>\n#include <lights_lambert_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <specularmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <clipping_planes_fragment>\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <alphahash_fragment>\n\t#include <specularmap_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\t#include <emissivemap_fragment>\n\t#include <lights_lambert_fragment>\n\t#include <lights_fragment_begin>\n\t#include <lights_fragment_maps>\n\t#include <lights_fragment_end>\n\t#include <aomap_fragment>\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include <envmap_fragment>\n\t#include <opaque_fragment>\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}",meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#include <common>\n#include <batching_pars_vertex>\n#include <uv_pars_vertex>\n#include <color_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <fog_pars_vertex>\n#include <normal_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <color_vertex>\n\t#include <morphinstance_vertex>\n\t#include <morphcolor_vertex>\n\t#include <batching_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <normal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <fog_vertex>\n\tvViewPosition = - mvPosition.xyz;\n}",meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#include <common>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <alphahash_pars_fragment>\n#include <fog_pars_fragment>\n#include <normal_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <clipping_planes_fragment>\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <alphahash_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t#else\n\t\tvec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\t#include <opaque_fragment>\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}",meshnormal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n\tvarying vec3 vViewPosition;\n#endif\n#include <common>\n#include <batching_pars_vertex>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <normal_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <batching_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphinstance_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <normal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}",meshnormal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n\tvarying vec3 vViewPosition;\n#endif\n#include <packing>\n#include <uv_pars_fragment>\n#include <normal_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\tvec4 diffuseColor = vec4( 0.0, 0.0, 0.0, opacity );\n\t#include <clipping_planes_fragment>\n\t#include <logdepthbuf_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\tgl_FragColor = vec4( packNormalToRGB( normal ), diffuseColor.a );\n\t#ifdef OPAQUE\n\t\tgl_FragColor.a = 1.0;\n\t#endif\n}",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#include <common>\n#include <batching_pars_vertex>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <envmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <normal_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <color_vertex>\n\t#include <morphcolor_vertex>\n\t#include <batching_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphinstance_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <normal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <envmap_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include <common>\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <alphahash_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <envmap_common_pars_fragment>\n#include <envmap_pars_fragment>\n#include <fog_pars_fragment>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <normal_pars_fragment>\n#include <lights_phong_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <specularmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <clipping_planes_fragment>\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <alphahash_fragment>\n\t#include <specularmap_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\t#include <emissivemap_fragment>\n\t#include <lights_phong_fragment>\n\t#include <lights_fragment_begin>\n\t#include <lights_fragment_maps>\n\t#include <lights_fragment_end>\n\t#include <aomap_fragment>\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include <envmap_fragment>\n\t#include <opaque_fragment>\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}",meshphysical_vert:"#define STANDARD\nvarying vec3 vViewPosition;\n#ifdef USE_TRANSMISSION\n\tvarying vec3 vWorldPosition;\n#endif\n#include <common>\n#include <batching_pars_vertex>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <normal_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <color_vertex>\n\t#include <morphinstance_vertex>\n\t#include <morphcolor_vertex>\n\t#include <batching_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <normal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n#ifdef USE_TRANSMISSION\n\tvWorldPosition = worldPosition.xyz;\n#endif\n}",meshphysical_frag:"#define STANDARD\n#ifdef PHYSICAL\n\t#define IOR\n\t#define USE_SPECULAR\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef IOR\n\tuniform float ior;\n#endif\n#ifdef USE_SPECULAR\n\tuniform float specularIntensity;\n\tuniform vec3 specularColor;\n\t#ifdef USE_SPECULAR_COLORMAP\n\t\tuniform sampler2D specularColorMap;\n\t#endif\n\t#ifdef USE_SPECULAR_INTENSITYMAP\n\t\tuniform sampler2D specularIntensityMap;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_DISPERSION\n\tuniform float dispersion;\n#endif\n#ifdef USE_IRIDESCENCE\n\tuniform float iridescence;\n\tuniform float iridescenceIOR;\n\tuniform float iridescenceThicknessMinimum;\n\tuniform float iridescenceThicknessMaximum;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheenColor;\n\tuniform float sheenRoughness;\n\t#ifdef USE_SHEEN_COLORMAP\n\t\tuniform sampler2D sheenColorMap;\n\t#endif\n\t#ifdef USE_SHEEN_ROUGHNESSMAP\n\t\tuniform sampler2D sheenRoughnessMap;\n\t#endif\n#endif\n#ifdef USE_ANISOTROPY\n\tuniform vec2 anisotropyVector;\n\t#ifdef USE_ANISOTROPYMAP\n\t\tuniform sampler2D anisotropyMap;\n\t#endif\n#endif\nvarying vec3 vViewPosition;\n#include <common>\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <alphahash_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <iridescence_fragment>\n#include <cube_uv_reflection_fragment>\n#include <envmap_common_pars_fragment>\n#include <envmap_physical_pars_fragment>\n#include <fog_pars_fragment>\n#include <lights_pars_begin>\n#include <normal_pars_fragment>\n#include <lights_physical_pars_fragment>\n#include <transmission_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <clearcoat_pars_fragment>\n#include <iridescence_pars_fragment>\n#include <roughnessmap_pars_fragment>\n#include <metalnessmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <clipping_planes_fragment>\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <alphahash_fragment>\n\t#include <roughnessmap_fragment>\n\t#include <metalnessmap_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\t#include <clearcoat_normal_fragment_begin>\n\t#include <clearcoat_normal_fragment_maps>\n\t#include <emissivemap_fragment>\n\t#include <lights_physical_fragment>\n\t#include <lights_fragment_begin>\n\t#include <lights_fragment_maps>\n\t#include <lights_fragment_end>\n\t#include <aomap_fragment>\n\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n\t#include <transmission_fragment>\n\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n\t#ifdef USE_SHEEN\n\t\tfloat sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\n\t\toutgoingLight = outgoingLight * sheenEnergyComp + sheenSpecularDirect + sheenSpecularIndirect;\n\t#endif\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNVcc = saturate( dot( geometryClearcoatNormal, geometryViewDir ) );\n\t\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n\t\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + ( clearcoatSpecularDirect + clearcoatSpecularIndirect ) * material.clearcoat;\n\t#endif\n\t#include <opaque_fragment>\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}",meshtoon_vert:"#define TOON\nvarying vec3 vViewPosition;\n#include <common>\n#include <batching_pars_vertex>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <normal_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <color_vertex>\n\t#include <morphinstance_vertex>\n\t#include <morphcolor_vertex>\n\t#include <batching_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <normal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}",meshtoon_frag:"#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include <common>\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <alphahash_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <gradientmap_pars_fragment>\n#include <fog_pars_fragment>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <normal_pars_fragment>\n#include <lights_toon_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <clipping_planes_fragment>\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <alphahash_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\t#include <emissivemap_fragment>\n\t#include <lights_toon_fragment>\n\t#include <lights_fragment_begin>\n\t#include <lights_fragment_maps>\n\t#include <lights_fragment_end>\n\t#include <aomap_fragment>\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include <opaque_fragment>\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}",points_vert:"uniform float size;\nuniform float scale;\n#include <common>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\n#ifdef USE_POINTS_UV\n\tvarying vec2 vUv;\n\tuniform mat3 uvTransform;\n#endif\nvoid main() {\n\t#ifdef USE_POINTS_UV\n\t\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\t#endif\n\t#include <color_vertex>\n\t#include <morphinstance_vertex>\n\t#include <morphcolor_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <project_vertex>\n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <worldpos_vertex>\n\t#include <fog_vertex>\n}",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include <common>\n#include <color_pars_fragment>\n#include <map_particle_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <alphahash_pars_fragment>\n#include <fog_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <clipping_planes_fragment>\n\tvec3 outgoingLight = vec3( 0.0 );\n\t#include <logdepthbuf_fragment>\n\t#include <map_particle_fragment>\n\t#include <color_fragment>\n\t#include <alphatest_fragment>\n\t#include <alphahash_fragment>\n\toutgoingLight = diffuseColor.rgb;\n\t#include <opaque_fragment>\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n}",shadow_vert:"#include <common>\n#include <batching_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <shadowmap_pars_vertex>\nvoid main() {\n\t#include <batching_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphinstance_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}",shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include <common>\n#include <packing>\n#include <fog_pars_fragment>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <logdepthbuf_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <shadowmask_pars_fragment>\nvoid main() {\n\t#include <logdepthbuf_fragment>\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n\t#include <fog_fragment>\n}",sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include <common>\n#include <uv_pars_vertex>\n#include <fog_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\tvec4 mvPosition = modelViewMatrix[ 3 ];\n\tvec2 scale = vec2( length( modelMatrix[ 0 ].xyz ), length( modelMatrix[ 1 ].xyz ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <fog_vertex>\n}",sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include <common>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <alphahash_pars_fragment>\n#include <fog_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <clipping_planes_fragment>\n\tvec3 outgoingLight = vec3( 0.0 );\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <alphahash_fragment>\n\toutgoingLight = diffuseColor.rgb;\n\t#include <opaque_fragment>\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n\t#include <fog_fragment>\n}"},Yt={common:{diffuse:{value:new ut.Q1f(16777215)},opacity:{value:1},map:{value:null},mapTransform:{value:new ut.dwI},alphaMap:{value:null},alphaMapTransform:{value:new ut.dwI},alphaTest:{value:0}},specularmap:{specularMap:{value:null},specularMapTransform:{value:new ut.dwI}},envmap:{envMap:{value:null},envMapRotation:{value:new ut.dwI},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1},aoMapTransform:{value:new ut.dwI}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1},lightMapTransform:{value:new ut.dwI}},bumpmap:{bumpMap:{value:null},bumpMapTransform:{value:new ut.dwI},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalMapTransform:{value:new ut.dwI},normalScale:{value:new ut.I9Y(1,1)}},displacementmap:{displacementMap:{value:null},displacementMapTransform:{value:new ut.dwI},displacementScale:{value:1},displacementBias:{value:0}},emissivemap:{emissiveMap:{value:null},emissiveMapTransform:{value:new ut.dwI}},metalnessmap:{metalnessMap:{value:null},metalnessMapTransform:{value:new ut.dwI}},roughnessmap:{roughnessMap:{value:null},roughnessMapTransform:{value:new ut.dwI}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new ut.Q1f(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotShadowMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new ut.Q1f(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaMapTransform:{value:new ut.dwI},alphaTest:{value:0},uvTransform:{value:new ut.dwI}},sprite:{diffuse:{value:new ut.Q1f(16777215)},opacity:{value:1},center:{value:new ut.I9Y(.5,.5)},rotation:{value:0},map:{value:null},mapTransform:{value:new ut.dwI},alphaMap:{value:null},alphaMapTransform:{value:new ut.dwI},alphaTest:{value:0}}},Xt={basic:{uniforms:(0,ut.Iit)([Yt.common,Yt.specularmap,Yt.envmap,Yt.aomap,Yt.lightmap,Yt.fog]),vertexShader:qt.meshbasic_vert,fragmentShader:qt.meshbasic_frag},lambert:{uniforms:(0,ut.Iit)([Yt.common,Yt.specularmap,Yt.envmap,Yt.aomap,Yt.lightmap,Yt.emissivemap,Yt.bumpmap,Yt.normalmap,Yt.displacementmap,Yt.fog,Yt.lights,{emissive:{value:new ut.Q1f(0)}}]),vertexShader:qt.meshlambert_vert,fragmentShader:qt.meshlambert_frag},phong:{uniforms:(0,ut.Iit)([Yt.common,Yt.specularmap,Yt.envmap,Yt.aomap,Yt.lightmap,Yt.emissivemap,Yt.bumpmap,Yt.normalmap,Yt.displacementmap,Yt.fog,Yt.lights,{emissive:{value:new ut.Q1f(0)},specular:{value:new ut.Q1f(1118481)},shininess:{value:30}}]),vertexShader:qt.meshphong_vert,fragmentShader:qt.meshphong_frag},standard:{uniforms:(0,ut.Iit)([Yt.common,Yt.envmap,Yt.aomap,Yt.lightmap,Yt.emissivemap,Yt.bumpmap,Yt.normalmap,Yt.displacementmap,Yt.roughnessmap,Yt.metalnessmap,Yt.fog,Yt.lights,{emissive:{value:new ut.Q1f(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:qt.meshphysical_vert,fragmentShader:qt.meshphysical_frag},toon:{uniforms:(0,ut.Iit)([Yt.common,Yt.aomap,Yt.lightmap,Yt.emissivemap,Yt.bumpmap,Yt.normalmap,Yt.displacementmap,Yt.gradientmap,Yt.fog,Yt.lights,{emissive:{value:new ut.Q1f(0)}}]),vertexShader:qt.meshtoon_vert,fragmentShader:qt.meshtoon_frag},matcap:{uniforms:(0,ut.Iit)([Yt.common,Yt.bumpmap,Yt.normalmap,Yt.displacementmap,Yt.fog,{matcap:{value:null}}]),vertexShader:qt.meshmatcap_vert,fragmentShader:qt.meshmatcap_frag},points:{uniforms:(0,ut.Iit)([Yt.points,Yt.fog]),vertexShader:qt.points_vert,fragmentShader:qt.points_frag},dashed:{uniforms:(0,ut.Iit)([Yt.common,Yt.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:qt.linedashed_vert,fragmentShader:qt.linedashed_frag},depth:{uniforms:(0,ut.Iit)([Yt.common,Yt.displacementmap]),vertexShader:qt.depth_vert,fragmentShader:qt.depth_frag},normal:{uniforms:(0,ut.Iit)([Yt.common,Yt.bumpmap,Yt.normalmap,Yt.displacementmap,{opacity:{value:1}}]),vertexShader:qt.meshnormal_vert,fragmentShader:qt.meshnormal_frag},sprite:{uniforms:(0,ut.Iit)([Yt.sprite,Yt.fog]),vertexShader:qt.sprite_vert,fragmentShader:qt.sprite_frag},background:{uniforms:{uvTransform:{value:new ut.dwI},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:qt.background_vert,fragmentShader:qt.background_frag},backgroundCube:{uniforms:{envMap:{value:null},flipEnvMap:{value:-1},backgroundBlurriness:{value:0},backgroundIntensity:{value:1},backgroundRotation:{value:new ut.dwI}},vertexShader:qt.backgroundCube_vert,fragmentShader:qt.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:qt.cube_vert,fragmentShader:qt.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:qt.equirect_vert,fragmentShader:qt.equirect_frag},distanceRGBA:{uniforms:(0,ut.Iit)([Yt.common,Yt.displacementmap,{referencePosition:{value:new ut.Pq0},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:qt.distanceRGBA_vert,fragmentShader:qt.distanceRGBA_frag},shadow:{uniforms:(0,ut.Iit)([Yt.lights,Yt.fog,{color:{value:new ut.Q1f(0)},opacity:{value:1}}]),vertexShader:qt.shadow_vert,fragmentShader:qt.shadow_frag}};Xt.physical={uniforms:(0,ut.Iit)([Xt.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatMapTransform:{value:new ut.dwI},clearcoatNormalMap:{value:null},clearcoatNormalMapTransform:{value:new ut.dwI},clearcoatNormalScale:{value:new ut.I9Y(1,1)},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatRoughnessMapTransform:{value:new ut.dwI},dispersion:{value:0},iridescence:{value:0},iridescenceMap:{value:null},iridescenceMapTransform:{value:new ut.dwI},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},iridescenceThicknessMapTransform:{value:new ut.dwI},sheen:{value:0},sheenColor:{value:new ut.Q1f(0)},sheenColorMap:{value:null},sheenColorMapTransform:{value:new ut.dwI},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},sheenRoughnessMapTransform:{value:new ut.dwI},transmission:{value:0},transmissionMap:{value:null},transmissionMapTransform:{value:new ut.dwI},transmissionSamplerSize:{value:new ut.I9Y},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},thicknessMapTransform:{value:new ut.dwI},attenuationDistance:{value:0},attenuationColor:{value:new ut.Q1f(0)},specularColor:{value:new ut.Q1f(1,1,1)},specularColorMap:{value:null},specularColorMapTransform:{value:new ut.dwI},specularIntensity:{value:1},specularIntensityMap:{value:null},specularIntensityMapTransform:{value:new ut.dwI},anisotropyVector:{value:new ut.I9Y},anisotropyMap:{value:null},anisotropyMapTransform:{value:new ut.dwI}}]),vertexShader:qt.meshphysical_vert,fragmentShader:qt.meshphysical_frag};const ys={r:0,b:0,g:0},Ec=new ut.O9p,lu=new ut.kn4;function WebGLBackground(ae,ue,nt,qt,Yt,uu,_u){const vu=new ut.Q1f(0);let wu,Hu,qu=!0===uu?0:1,Ju=null,_h=0,ed=null;function getBackground(ae){let ut=!0===ae.isScene?ae.background:null;if(ut&&ut.isTexture){ut=(ae.backgroundBlurriness>0?nt:ue).get(ut)}return ut}function setClear(ue,nt){ue.getRGB(ys,(0,ut._Ut)(ae)),qt.buffers.color.setClear(ys.r,ys.g,ys.b,nt,_u)}return{getClearColor:function(){return vu},setClearColor:function(ae,ue){void 0===ue&&(ue=1),vu.set(ae),qu=ue,setClear(vu,qu)},getClearAlpha:function(){return qu},setClearAlpha:function(ae){qu=ae,setClear(vu,qu)},render:function(ue){let nt=!1;const ut=getBackground(ue);null===ut?setClear(vu,qu):ut&&ut.isColor&&(setClear(ut,1),nt=!0);const Yt=ae.xr.getEnvironmentBlendMode();"additive"===Yt?qt.buffers.color.setClear(0,0,0,1,_u):"alpha-blend"===Yt&&qt.buffers.color.setClear(0,0,0,0,_u),(ae.autoClear||nt)&&(qt.buffers.depth.setTest(!0),qt.buffers.depth.setMask(!0),qt.buffers.color.setMask(!0),ae.clear(ae.autoClearColor,ae.autoClearDepth,ae.autoClearStencil))},addToRenderList:function(ue,nt){const qt=getBackground(nt);qt&&(qt.isCubeTexture||qt.mapping===ut.Om)?(void 0===Hu&&(Hu=new ut.eaF(new ut.iNn(1,1,1),new ut.BKk({name:"BackgroundCubeMaterial",uniforms:(0,ut.lxW)(Xt.backgroundCube.uniforms),vertexShader:Xt.backgroundCube.vertexShader,fragmentShader:Xt.backgroundCube.fragmentShader,side:ut.hsX,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),Hu.geometry.deleteAttribute("normal"),Hu.geometry.deleteAttribute("uv"),Hu.onBeforeRender=function(ae,ue,nt){this.matrixWorld.copyPosition(nt.matrixWorld)},Object.defineProperty(Hu.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),Yt.update(Hu)),Ec.copy(nt.backgroundRotation),Ec.x*=-1,Ec.y*=-1,Ec.z*=-1,qt.isCubeTexture&&!1===qt.isRenderTargetTexture&&(Ec.y*=-1,Ec.z*=-1),Hu.material.uniforms.envMap.value=qt,Hu.material.uniforms.flipEnvMap.value=qt.isCubeTexture&&!1===qt.isRenderTargetTexture?-1:1,Hu.material.uniforms.backgroundBlurriness.value=nt.backgroundBlurriness,Hu.material.uniforms.backgroundIntensity.value=nt.backgroundIntensity,Hu.material.uniforms.backgroundRotation.value.setFromMatrix4(lu.makeRotationFromEuler(Ec)),Hu.material.toneMapped=ut.ppV.getTransfer(qt.colorSpace)!==ut.KLL,Ju===qt&&_h===qt.version&&ed===ae.toneMapping||(Hu.material.needsUpdate=!0,Ju=qt,_h=qt.version,ed=ae.toneMapping),Hu.layers.enableAll(),ue.unshift(Hu,Hu.geometry,Hu.material,0,0,null)):qt&&qt.isTexture&&(void 0===wu&&(wu=new ut.eaF(new ut.bdM(2,2),new ut.BKk({name:"BackgroundMaterial",uniforms:(0,ut.lxW)(Xt.background.uniforms),vertexShader:Xt.background.vertexShader,fragmentShader:Xt.background.fragmentShader,side:ut.hB5,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),wu.geometry.deleteAttribute("normal"),Object.defineProperty(wu.material,"map",{get:function(){return this.uniforms.t2D.value}}),Yt.update(wu)),wu.material.uniforms.t2D.value=qt,wu.material.uniforms.backgroundIntensity.value=nt.backgroundIntensity,wu.material.toneMapped=ut.ppV.getTransfer(qt.colorSpace)!==ut.KLL,!0===qt.matrixAutoUpdate&&qt.updateMatrix(),wu.material.uniforms.uvTransform.value.copy(qt.matrix),Ju===qt&&_h===qt.version&&ed===ae.toneMapping||(wu.material.needsUpdate=!0,Ju=qt,_h=qt.version,ed=ae.toneMapping),wu.layers.enableAll(),ue.unshift(wu,wu.geometry,wu.material,0,0,null))},dispose:function(){void 0!==Hu&&(Hu.geometry.dispose(),Hu.material.dispose(),Hu=void 0),void 0!==wu&&(wu.geometry.dispose(),wu.material.dispose(),wu=void 0)}}}function WebGLBindingStates(ae,ue){const nt=ae.getParameter(ae.MAX_VERTEX_ATTRIBS),qt={},Yt=createBindingState(null);let Xt=Yt,ys=!1;function bindVertexArrayObject(ue){return ae.bindVertexArray(ue)}function deleteVertexArrayObject(ue){return ae.deleteVertexArray(ue)}function createBindingState(ae){const ue=[],ut=[],qt=[];for(let Yt=0;Yt<nt;Yt++)ue[Yt]=0,ut[Yt]=0,qt[Yt]=0;return{geometry:null,program:null,wireframe:!1,newAttributes:ue,enabledAttributes:ut,attributeDivisors:qt,object:ae,attributes:{},index:null}}function initAttributes(){const ae=Xt.newAttributes;for(let ue=0,nt=ae.length;ue<nt;ue++)ae[ue]=0}function enableAttribute(ae){enableAttributeAndDivisor(ae,0)}function enableAttributeAndDivisor(ue,nt){const ut=Xt.newAttributes,qt=Xt.enabledAttributes,Yt=Xt.attributeDivisors;ut[ue]=1,0===qt[ue]&&(ae.enableVertexAttribArray(ue),qt[ue]=1),Yt[ue]!==nt&&(ae.vertexAttribDivisor(ue,nt),Yt[ue]=nt)}function disableUnusedAttributes(){const ue=Xt.newAttributes,nt=Xt.enabledAttributes;for(let ut=0,qt=nt.length;ut<qt;ut++)nt[ut]!==ue[ut]&&(ae.disableVertexAttribArray(ut),nt[ut]=0)}function vertexAttribPointer(ue,nt,ut,qt,Yt,Xt,ys){!0===ys?ae.vertexAttribIPointer(ue,nt,ut,Yt,Xt):ae.vertexAttribPointer(ue,nt,ut,qt,Yt,Xt)}function reset(){resetDefaultState(),ys=!0,Xt!==Yt&&(Xt=Yt,bindVertexArrayObject(Xt.object))}function resetDefaultState(){Yt.geometry=null,Yt.program=null,Yt.wireframe=!1}return{setup:function(nt,Yt,Ec,lu,uu){let _u=!1;const vu=function(ue,nt,ut){const Yt=!0===ut.wireframe;let Xt=qt[ue.id];void 0===Xt&&(Xt={},qt[ue.id]=Xt);let ys=Xt[nt.id];void 0===ys&&(ys={},Xt[nt.id]=ys);let Ec=ys[Yt];void 0===Ec&&(Ec=createBindingState(ae.createVertexArray()),ys[Yt]=Ec);return Ec}(lu,Ec,Yt);Xt!==vu&&(Xt=vu,bindVertexArrayObject(Xt.object)),_u=function(ae,ue,nt,ut){const qt=Xt.attributes,Yt=ue.attributes;let ys=0;const Ec=nt.getAttributes();for(const Xt in Ec){if(Ec[Xt].location>=0){const ue=qt[Xt];let nt=Yt[Xt];if(void 0===nt&&("instanceMatrix"===Xt&&ae.instanceMatrix&&(nt=ae.instanceMatrix),"instanceColor"===Xt&&ae.instanceColor&&(nt=ae.instanceColor)),void 0===ue)return!0;if(ue.attribute!==nt)return!0;if(nt&&ue.data!==nt.data)return!0;ys++}}return Xt.attributesNum!==ys||Xt.index!==ut}(nt,lu,Ec,uu),_u&&function(ae,ue,nt,ut){const qt={},Yt=ue.attributes;let ys=0;const Ec=nt.getAttributes();for(const Xt in Ec){if(Ec[Xt].location>=0){let ue=Yt[Xt];void 0===ue&&("instanceMatrix"===Xt&&ae.instanceMatrix&&(ue=ae.instanceMatrix),"instanceColor"===Xt&&ae.instanceColor&&(ue=ae.instanceColor));const nt={};nt.attribute=ue,ue&&ue.data&&(nt.data=ue.data),qt[Xt]=nt,ys++}}Xt.attributes=qt,Xt.attributesNum=ys,Xt.index=ut}(nt,lu,Ec,uu),null!==uu&&ue.update(uu,ae.ELEMENT_ARRAY_BUFFER),(_u||ys)&&(ys=!1,function(nt,qt,Yt,Xt){initAttributes();const ys=Xt.attributes,Ec=Yt.getAttributes(),lu=qt.defaultAttributeValues;for(const uu in Ec){const qt=Ec[uu];if(qt.location>=0){let Yt=ys[uu];if(void 0===Yt&&("instanceMatrix"===uu&&nt.instanceMatrix&&(Yt=nt.instanceMatrix),"instanceColor"===uu&&nt.instanceColor&&(Yt=nt.instanceColor)),void 0!==Yt){const ys=Yt.normalized,Ec=Yt.itemSize,lu=ue.get(Yt);if(void 0===lu)continue;const uu=lu.buffer,_u=lu.type,vu=lu.bytesPerElement,wu=_u===ae.INT||_u===ae.UNSIGNED_INT||Yt.gpuType===ut.Yuy;if(Yt.isInterleavedBufferAttribute){const ue=Yt.data,ut=ue.stride,lu=Yt.offset;if(ue.isInstancedInterleavedBuffer){for(let ae=0;ae<qt.locationSize;ae++)enableAttributeAndDivisor(qt.location+ae,ue.meshPerAttribute);!0!==nt.isInstancedMesh&&void 0===Xt._maxInstanceCount&&(Xt._maxInstanceCount=ue.meshPerAttribute*ue.count)}else for(let ae=0;ae<qt.locationSize;ae++)enableAttribute(qt.location+ae);ae.bindBuffer(ae.ARRAY_BUFFER,uu);for(let ae=0;ae<qt.locationSize;ae++)vertexAttribPointer(qt.location+ae,Ec/qt.locationSize,_u,ys,ut*vu,(lu+Ec/qt.locationSize*ae)*vu,wu)}else{if(Yt.isInstancedBufferAttribute){for(let ae=0;ae<qt.locationSize;ae++)enableAttributeAndDivisor(qt.location+ae,Yt.meshPerAttribute);!0!==nt.isInstancedMesh&&void 0===Xt._maxInstanceCount&&(Xt._maxInstanceCount=Yt.meshPerAttribute*Yt.count)}else for(let ae=0;ae<qt.locationSize;ae++)enableAttribute(qt.location+ae);ae.bindBuffer(ae.ARRAY_BUFFER,uu);for(let ae=0;ae<qt.locationSize;ae++)vertexAttribPointer(qt.location+ae,Ec/qt.locationSize,_u,ys,Ec*vu,Ec/qt.locationSize*ae*vu,wu)}}else if(void 0!==lu){const ue=lu[uu];if(void 0!==ue)switch(ue.length){case 2:ae.vertexAttrib2fv(qt.location,ue);break;case 3:ae.vertexAttrib3fv(qt.location,ue);break;case 4:ae.vertexAttrib4fv(qt.location,ue);break;default:ae.vertexAttrib1fv(qt.location,ue)}}}}disableUnusedAttributes()}(nt,Yt,Ec,lu),null!==uu&&ae.bindBuffer(ae.ELEMENT_ARRAY_BUFFER,ue.get(uu).buffer))},reset:reset,resetDefaultState:resetDefaultState,dispose:function(){reset();for(const ae in qt){const ue=qt[ae];for(const ae in ue){const nt=ue[ae];for(const ae in nt)deleteVertexArrayObject(nt[ae].object),delete nt[ae];delete ue[ae]}delete qt[ae]}},releaseStatesOfGeometry:function(ae){if(void 0===qt[ae.id])return;const ue=qt[ae.id];for(const nt in ue){const ae=ue[nt];for(const ue in ae)deleteVertexArrayObject(ae[ue].object),delete ae[ue];delete ue[nt]}delete qt[ae.id]},releaseStatesOfProgram:function(ae){for(const ue in qt){const nt=qt[ue];if(void 0===nt[ae.id])continue;const ut=nt[ae.id];for(const ae in ut)deleteVertexArrayObject(ut[ae].object),delete ut[ae];delete nt[ae.id]}},initAttributes:initAttributes,enableAttribute:enableAttribute,disableUnusedAttributes:disableUnusedAttributes}}function WebGLBufferRenderer(ae,ue,nt){let ut;function renderInstances(ue,qt,Yt){0!==Yt&&(ae.drawArraysInstanced(ut,ue,qt,Yt),nt.update(qt,ut,Yt))}this.setMode=function(ae){ut=ae},this.render=function(ue,qt){ae.drawArrays(ut,ue,qt),nt.update(qt,ut,1)},this.renderInstances=renderInstances,this.renderMultiDraw=function(ae,qt,Yt){if(0===Yt)return;ue.get("WEBGL_multi_draw").multiDrawArraysWEBGL(ut,ae,0,qt,0,Yt);let Xt=0;for(let ue=0;ue<Yt;ue++)Xt+=qt[ue];nt.update(Xt,ut,1)},this.renderMultiDrawInstances=function(ae,qt,Yt,Xt){if(0===Yt)return;const ys=ue.get("WEBGL_multi_draw");if(null===ys)for(let ue=0;ue<ae.length;ue++)renderInstances(ae[ue],qt[ue],Xt[ue]);else{ys.multiDrawArraysInstancedWEBGL(ut,ae,0,qt,0,Xt,0,Yt);let ue=0;for(let ae=0;ae<Yt;ae++)ue+=qt[ae]*Xt[ae];nt.update(ue,ut,1)}}}function WebGLCapabilities(ae,ue,nt,qt){let Yt;function getMaxPrecision(ue){if("highp"===ue){if(ae.getShaderPrecisionFormat(ae.VERTEX_SHADER,ae.HIGH_FLOAT).precision>0&&ae.getShaderPrecisionFormat(ae.FRAGMENT_SHADER,ae.HIGH_FLOAT).precision>0)return"highp";ue="mediump"}return"mediump"===ue&&ae.getShaderPrecisionFormat(ae.VERTEX_SHADER,ae.MEDIUM_FLOAT).precision>0&&ae.getShaderPrecisionFormat(ae.FRAGMENT_SHADER,ae.MEDIUM_FLOAT).precision>0?"mediump":"lowp"}let Xt=void 0!==nt.precision?nt.precision:"highp";const ys=getMaxPrecision(Xt);ys!==Xt&&(console.warn("THREE.WebGLRenderer:",Xt,"not supported, using",ys,"instead."),Xt=ys);const Ec=!0===nt.logarithmicDepthBuffer,lu=!0===nt.reversedDepthBuffer&&ue.has("EXT_clip_control"),uu=ae.getParameter(ae.MAX_TEXTURE_IMAGE_UNITS),_u=ae.getParameter(ae.MAX_VERTEX_TEXTURE_IMAGE_UNITS);return{isWebGL2:!0,getMaxAnisotropy:function(){if(void 0!==Yt)return Yt;if(!0===ue.has("EXT_texture_filter_anisotropic")){const nt=ue.get("EXT_texture_filter_anisotropic");Yt=ae.getParameter(nt.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else Yt=0;return Yt},getMaxPrecision:getMaxPrecision,textureFormatReadable:function(ue){return ue===ut.GWd||qt.convert(ue)===ae.getParameter(ae.IMPLEMENTATION_COLOR_READ_FORMAT)},textureTypeReadable:function(nt){const Yt=nt===ut.ix0&&(ue.has("EXT_color_buffer_half_float")||ue.has("EXT_color_buffer_float"));return!(nt!==ut.OUM&&qt.convert(nt)!==ae.getParameter(ae.IMPLEMENTATION_COLOR_READ_TYPE)&&nt!==ut.RQf&&!Yt)},precision:Xt,logarithmicDepthBuffer:Ec,reversedDepthBuffer:lu,maxTextures:uu,maxVertexTextures:_u,maxTextureSize:ae.getParameter(ae.MAX_TEXTURE_SIZE),maxCubemapSize:ae.getParameter(ae.MAX_CUBE_MAP_TEXTURE_SIZE),maxAttributes:ae.getParameter(ae.MAX_VERTEX_ATTRIBS),maxVertexUniforms:ae.getParameter(ae.MAX_VERTEX_UNIFORM_VECTORS),maxVaryings:ae.getParameter(ae.MAX_VARYING_VECTORS),maxFragmentUniforms:ae.getParameter(ae.MAX_FRAGMENT_UNIFORM_VECTORS),vertexTextures:_u>0,maxSamples:ae.getParameter(ae.MAX_SAMPLES)}}function WebGLClipping(ae){const ue=this;let nt=null,qt=0,Yt=!1,Xt=!1;const ys=new ut.Zcv,Ec=new ut.dwI,lu={value:null,needsUpdate:!1};function projectPlanes(ae,nt,ut,qt){const Yt=null!==ae?ae.length:0;let Xt=null;if(0!==Yt){if(Xt=lu.value,!0!==qt||null===Xt){const ue=ut+4*Yt,qt=nt.matrixWorldInverse;Ec.getNormalMatrix(qt),(null===Xt||Xt.length<ue)&&(Xt=new Float32Array(ue));for(let nt=0,lu=ut;nt!==Yt;++nt,lu+=4)ys.copy(ae[nt]).applyMatrix4(qt,Ec),ys.normal.toArray(Xt,lu),Xt[lu+3]=ys.constant}lu.value=Xt,lu.needsUpdate=!0}return ue.numPlanes=Yt,ue.numIntersection=0,Xt}this.uniform=lu,this.numPlanes=0,this.numIntersection=0,this.init=function(ae,ue){const nt=0!==ae.length||ue||0!==qt||Yt;return Yt=ue,qt=ae.length,nt},this.beginShadows=function(){Xt=!0,projectPlanes(null)},this.endShadows=function(){Xt=!1},this.setGlobalState=function(ae,ue){nt=projectPlanes(ae,ue,0)},this.setState=function(ut,ys,Ec){const uu=ut.clippingPlanes,_u=ut.clipIntersection,vu=ut.clipShadows,wu=ae.get(ut);if(!Yt||null===uu||0===uu.length||Xt&&!vu)Xt?projectPlanes(null):function(){lu.value!==nt&&(lu.value=nt,lu.needsUpdate=qt>0);ue.numPlanes=qt,ue.numIntersection=0}();else{const ae=Xt?0:qt,ue=4*ae;let ut=wu.clippingState||null;lu.value=ut,ut=projectPlanes(uu,ys,ue,Ec);for(let qt=0;qt!==ue;++qt)ut[qt]=nt[qt];wu.clippingState=ut,this.numIntersection=_u?this.numPlanes:0,this.numPlanes+=ae}}}function WebGLCubeMaps(ae){let ue=new WeakMap;function mapTextureMapping(ae,ue){return ue===ut.wfO?ae.mapping=ut.hy7:ue===ut.uV5&&(ae.mapping=ut.xFO),ae}function onTextureDispose(ae){const nt=ae.target;nt.removeEventListener("dispose",onTextureDispose);const ut=ue.get(nt);void 0!==ut&&(ue.delete(nt),ut.dispose())}return{get:function(nt){if(nt&&nt.isTexture){const qt=nt.mapping;if(qt===ut.wfO||qt===ut.uV5){if(ue.has(nt)){return mapTextureMapping(ue.get(nt).texture,nt.mapping)}{const qt=nt.image;if(qt&&qt.height>0){const Yt=new ut.o6l(qt.height);return Yt.fromEquirectangularTexture(ae,nt),ue.set(nt,Yt),nt.addEventListener("dispose",onTextureDispose),mapTextureMapping(Yt.texture,nt.mapping)}return null}}}return nt},dispose:function(){ue=new WeakMap}}}const uu=[.125,.215,.35,.446,.526,.582],_u=20,vu=new ut.qUd,wu=new ut.Q1f;let Hu=null,qu=0,Ju=0,_h=!1;const ed=(1+Math.sqrt(5))/2,td=1/ed,id=[new ut.Pq0(-ed,td,0),new ut.Pq0(ed,td,0),new ut.Pq0(-td,0,ed),new ut.Pq0(td,0,ed),new ut.Pq0(0,ed,-td),new ut.Pq0(0,ed,td),new ut.Pq0(-1,1,-1),new ut.Pq0(1,1,-1),new ut.Pq0(-1,1,1),new ut.Pq0(1,1,1)],nd=new ut.Pq0;class PMREMGenerator{constructor(ae){this._renderer=ae,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._lodPlanes=[],this._sizeLods=[],this._sigmas=[],this._blurMaterial=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._compileMaterial(this._blurMaterial)}fromScene(ae,ue,nt,ut,qt){void 0===ue&&(ue=0),void 0===nt&&(nt=.1),void 0===ut&&(ut=100),void 0===qt&&(qt={});const{size:Yt=256,position:Xt=nd}=qt;Hu=this._renderer.getRenderTarget(),qu=this._renderer.getActiveCubeFace(),Ju=this._renderer.getActiveMipmapLevel(),_h=this._renderer.xr.enabled,this._renderer.xr.enabled=!1,this._setSize(Yt);const ys=this._allocateTargets();return ys.depthBuffer=!0,this._sceneToCubeUV(ae,nt,ut,ys,Xt),ue>0&&this._blur(ys,0,0,ue),this._applyPMREM(ys),this._cleanup(ys),ys}fromEquirectangular(ae,ue){return void 0===ue&&(ue=null),this._fromTexture(ae,ue)}fromCubemap(ae,ue){return void 0===ue&&(ue=null),this._fromTexture(ae,ue)}compileCubemapShader(){null===this._cubemapMaterial&&(this._cubemapMaterial=_getCubemapMaterial(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){null===this._equirectMaterial&&(this._equirectMaterial=_getEquirectMaterial(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),null!==this._cubemapMaterial&&this._cubemapMaterial.dispose(),null!==this._equirectMaterial&&this._equirectMaterial.dispose()}_setSize(ae){this._lodMax=Math.floor(Math.log2(ae)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){null!==this._blurMaterial&&this._blurMaterial.dispose(),null!==this._pingPongRenderTarget&&this._pingPongRenderTarget.dispose();for(let ae=0;ae<this._lodPlanes.length;ae++)this._lodPlanes[ae].dispose()}_cleanup(ae){this._renderer.setRenderTarget(Hu,qu,Ju),this._renderer.xr.enabled=_h,ae.scissorTest=!1,_setViewport(ae,0,0,ae.width,ae.height)}_fromTexture(ae,ue){ae.mapping===ut.hy7||ae.mapping===ut.xFO?this._setSize(0===ae.image.length?16:ae.image[0].width||ae.image[0].image.width):this._setSize(ae.image.width/4),Hu=this._renderer.getRenderTarget(),qu=this._renderer.getActiveCubeFace(),Ju=this._renderer.getActiveMipmapLevel(),_h=this._renderer.xr.enabled,this._renderer.xr.enabled=!1;const nt=ue||this._allocateTargets();return this._textureToCubeUV(ae,nt),this._applyPMREM(nt),this._cleanup(nt),nt}_allocateTargets(){const ae=3*Math.max(this._cubeSize,112),ue=4*this._cubeSize,nt={magFilter:ut.k6q,minFilter:ut.k6q,generateMipmaps:!1,type:ut.ix0,format:ut.GWd,colorSpace:ut.Zr2,depthBuffer:!1},qt=_createRenderTarget(ae,ue,nt);if(null===this._pingPongRenderTarget||this._pingPongRenderTarget.width!==ae||this._pingPongRenderTarget.height!==ue){null!==this._pingPongRenderTarget&&this._dispose(),this._pingPongRenderTarget=_createRenderTarget(ae,ue,nt);const{_lodMax:qt}=this;({sizeLods:this._sizeLods,lodPlanes:this._lodPlanes,sigmas:this._sigmas}=function(ae){const ue=[],nt=[],qt=[];let Yt=ae;const Xt=ae-4+1+uu.length;for(let ys=0;ys<Xt;ys++){const Xt=Math.pow(2,Yt);nt.push(Xt);let Ec=1/Xt;ys>ae-4?Ec=uu[ys-ae+4-1]:0===ys&&(Ec=0),qt.push(Ec);const lu=1/(Xt-2),_u=-lu,vu=1+lu,wu=[_u,_u,vu,_u,vu,vu,_u,_u,vu,vu,_u,vu],Hu=6,qu=6,Ju=3,_h=2,ed=1,td=new Float32Array(Ju*qu*Hu),id=new Float32Array(_h*qu*Hu),nd=new Float32Array(ed*qu*Hu);for(let ae=0;ae<Hu;ae++){const ue=ae%3*2/3-1,nt=ae>2?0:-1,ut=[ue,nt,0,ue+2/3,nt,0,ue+2/3,nt+1,0,ue,nt,0,ue+2/3,nt+1,0,ue,nt+1,0];td.set(ut,Ju*qu*ae),id.set(wu,_h*qu*ae);const qt=[ae,ae,ae,ae,ae,ae];nd.set(qt,ed*qu*ae)}const rd=new ut.LoY;rd.setAttribute("position",new ut.THS(td,Ju)),rd.setAttribute("uv",new ut.THS(id,_h)),rd.setAttribute("faceIndex",new ut.THS(nd,ed)),ue.push(rd),Yt>4&&Yt--}return{lodPlanes:ue,sizeLods:nt,sigmas:qt}}(qt)),this._blurMaterial=function(ae,ue,nt){const qt=new Float32Array(_u),Yt=new ut.Pq0(0,1,0),Xt=new ut.BKk({name:"SphericalGaussianBlur",defines:{n:_u,CUBEUV_TEXEL_WIDTH:1/ue,CUBEUV_TEXEL_HEIGHT:1/nt,CUBEUV_MAX_MIP:`${ae}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:qt},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:Yt}},vertexShader:_getCommonVertexShader(),fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform int samples;\n\t\t\tuniform float weights[ n ];\n\t\t\tuniform bool latitudinal;\n\t\t\tuniform float dTheta;\n\t\t\tuniform float mipInt;\n\t\t\tuniform vec3 poleAxis;\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include <cube_uv_reflection_fragment>\n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t",blending:ut.XIg,depthTest:!1,depthWrite:!1});return Xt}(qt,ae,ue)}return qt}_compileMaterial(ae){const ue=new ut.eaF(this._lodPlanes[0],ae);this._renderer.compile(ue,vu)}_sceneToCubeUV(ae,ue,nt,qt,Yt){const Xt=new ut.ubm(90,1,ue,nt),ys=[1,-1,1,1,1,1],Ec=[1,1,1,-1,-1,-1],lu=this._renderer,uu=lu.autoClear,_u=lu.toneMapping;lu.getClearColor(wu),lu.toneMapping=ut.y_p,lu.autoClear=!1;lu.state.buffers.depth.getReversed()&&(lu.setRenderTarget(qt),lu.clearDepth(),lu.setRenderTarget(null));const vu=new ut.V9B({name:"PMREM.Background",side:ut.hsX,depthWrite:!1,depthTest:!1}),Hu=new ut.eaF(new ut.iNn,vu);let qu=!1;const Ju=ae.background;Ju?Ju.isColor&&(vu.color.copy(Ju),ae.background=null,qu=!0):(vu.color.copy(wu),qu=!0);for(let ut=0;ut<6;ut++){const ue=ut%3;0===ue?(Xt.up.set(0,ys[ut],0),Xt.position.set(Yt.x,Yt.y,Yt.z),Xt.lookAt(Yt.x+Ec[ut],Yt.y,Yt.z)):1===ue?(Xt.up.set(0,0,ys[ut]),Xt.position.set(Yt.x,Yt.y,Yt.z),Xt.lookAt(Yt.x,Yt.y+Ec[ut],Yt.z)):(Xt.up.set(0,ys[ut],0),Xt.position.set(Yt.x,Yt.y,Yt.z),Xt.lookAt(Yt.x,Yt.y,Yt.z+Ec[ut]));const nt=this._cubeSize;_setViewport(qt,ue*nt,ut>2?nt:0,nt,nt),lu.setRenderTarget(qt),qu&&lu.render(Hu,Xt),lu.render(ae,Xt)}Hu.geometry.dispose(),Hu.material.dispose(),lu.toneMapping=_u,lu.autoClear=uu,ae.background=Ju}_textureToCubeUV(ae,ue){const nt=this._renderer,qt=ae.mapping===ut.hy7||ae.mapping===ut.xFO;qt?(null===this._cubemapMaterial&&(this._cubemapMaterial=_getCubemapMaterial()),this._cubemapMaterial.uniforms.flipEnvMap.value=!1===ae.isRenderTargetTexture?-1:1):null===this._equirectMaterial&&(this._equirectMaterial=_getEquirectMaterial());const Yt=qt?this._cubemapMaterial:this._equirectMaterial,Xt=new ut.eaF(this._lodPlanes[0],Yt);Yt.uniforms.envMap.value=ae;const ys=this._cubeSize;_setViewport(ue,0,0,3*ys,2*ys),nt.setRenderTarget(ue),nt.render(Xt,vu)}_applyPMREM(ae){const ue=this._renderer,nt=ue.autoClear;ue.autoClear=!1;const ut=this._lodPlanes.length;for(let qt=1;qt<ut;qt++){const ue=Math.sqrt(this._sigmas[qt]*this._sigmas[qt]-this._sigmas[qt-1]*this._sigmas[qt-1]),nt=id[(ut-qt-1)%id.length];this._blur(ae,qt-1,qt,ue,nt)}ue.autoClear=nt}_blur(ae,ue,nt,ut,qt){const Yt=this._pingPongRenderTarget;this._halfBlur(ae,Yt,ue,nt,ut,"latitudinal",qt),this._halfBlur(Yt,ae,nt,nt,ut,"longitudinal",qt)}_halfBlur(ae,ue,nt,qt,Yt,Xt,ys){const Ec=this._renderer,lu=this._blurMaterial;"latitudinal"!==Xt&&"longitudinal"!==Xt&&console.error("blur direction must be either latitudinal or longitudinal!");const uu=new ut.eaF(this._lodPlanes[qt],lu),wu=lu.uniforms,Hu=this._sizeLods[nt]-1,qu=isFinite(Yt)?Math.PI/(2*Hu):2*Math.PI/39,Ju=Yt/qu,_h=isFinite(Yt)?1+Math.floor(3*Ju):_u;_h>_u&&console.warn(`sigmaRadians, ${Yt}, is too large and will clip, as it requested ${_h} samples when the maximum is set to 20`);const ed=[];let td=0;for(let ut=0;ut<_u;++ut){const ae=ut/Ju,ue=Math.exp(-ae*ae/2);ed.push(ue),0===ut?td+=ue:ut<_h&&(td+=2*ue)}for(let ut=0;ut<ed.length;ut++)ed[ut]=ed[ut]/td;wu.envMap.value=ae.texture,wu.samples.value=_h,wu.weights.value=ed,wu.latitudinal.value="latitudinal"===Xt,ys&&(wu.poleAxis.value=ys);const{_lodMax:id}=this;wu.dTheta.value=qu,wu.mipInt.value=id-nt;const nd=this._sizeLods[qt];_setViewport(ue,3*nd*(qt>id-4?qt-id+4:0),4*(this._cubeSize-nd),3*nd,2*nd),Ec.setRenderTarget(ue),Ec.render(uu,vu)}}function _createRenderTarget(ae,ue,nt){const qt=new ut.nWS(ae,ue,nt);return qt.texture.mapping=ut.Om,qt.texture.name="PMREM.cubeUv",qt.scissorTest=!0,qt}function _setViewport(ae,ue,nt,ut,qt){ae.viewport.set(ue,nt,ut,qt),ae.scissor.set(ue,nt,ut,qt)}function _getEquirectMaterial(){return new ut.BKk({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null}},vertexShader:_getCommonVertexShader(),fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\n\t\t\t#include <common>\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tgl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 );\n\n\t\t\t}\n\t\t",blending:ut.XIg,depthTest:!1,depthWrite:!1})}function _getCubemapMaterial(){return new ut.BKk({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:_getCommonVertexShader(),fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tuniform float flipEnvMap;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) );\n\n\t\t\t}\n\t\t",blending:ut.XIg,depthTest:!1,depthWrite:!1})}function _getCommonVertexShader(){return"\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t"}function WebGLCubeUVMaps(ae){let ue=new WeakMap,nt=null;function onTextureDispose(ae){const nt=ae.target;nt.removeEventListener("dispose",onTextureDispose);const ut=ue.get(nt);void 0!==ut&&(ue.delete(nt),ut.dispose())}return{get:function(qt){if(qt&&qt.isTexture){const Yt=qt.mapping,Xt=Yt===ut.wfO||Yt===ut.uV5,ys=Yt===ut.hy7||Yt===ut.xFO;if(Xt||ys){let ut=ue.get(qt);const Yt=void 0!==ut?ut.texture.pmremVersion:0;if(qt.isRenderTargetTexture&&qt.pmremVersion!==Yt)return null===nt&&(nt=new PMREMGenerator(ae)),ut=Xt?nt.fromEquirectangular(qt,ut):nt.fromCubemap(qt,ut),ut.texture.pmremVersion=qt.pmremVersion,ue.set(qt,ut),ut.texture;if(void 0!==ut)return ut.texture;{const Yt=qt.image;return Xt&&Yt&&Yt.height>0||ys&&Yt&&function(ae){let ue=0;const nt=6;for(let ut=0;ut<nt;ut++)void 0!==ae[ut]&&ue++;return ue===nt}(Yt)?(null===nt&&(nt=new PMREMGenerator(ae)),ut=Xt?nt.fromEquirectangular(qt):nt.fromCubemap(qt),ut.texture.pmremVersion=qt.pmremVersion,ue.set(qt,ut),qt.addEventListener("dispose",onTextureDispose),ut.texture):null}}}return qt},dispose:function(){ue=new WeakMap,null!==nt&&(nt.dispose(),nt=null)}}}function WebGLExtensions(ae){const ue={};function getExtension(nt){if(void 0!==ue[nt])return ue[nt];let ut;switch(nt){case"WEBGL_depth_texture":ut=ae.getExtension("WEBGL_depth_texture")||ae.getExtension("MOZ_WEBGL_depth_texture")||ae.getExtension("WEBKIT_WEBGL_depth_texture");break;case"EXT_texture_filter_anisotropic":ut=ae.getExtension("EXT_texture_filter_anisotropic")||ae.getExtension("MOZ_EXT_texture_filter_anisotropic")||ae.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":ut=ae.getExtension("WEBGL_compressed_texture_s3tc")||ae.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||ae.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":ut=ae.getExtension("WEBGL_compressed_texture_pvrtc")||ae.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;default:ut=ae.getExtension(nt)}return ue[nt]=ut,ut}return{has:function(ae){return null!==getExtension(ae)},init:function(){getExtension("EXT_color_buffer_float"),getExtension("WEBGL_clip_cull_distance"),getExtension("OES_texture_float_linear"),getExtension("EXT_color_buffer_half_float"),getExtension("WEBGL_multisampled_render_to_texture"),getExtension("WEBGL_render_shared_exponent")},get:function(ae){const ue=getExtension(ae);return null===ue&&(0,ut.mcG)("THREE.WebGLRenderer: "+ae+" extension not supported."),ue}}}function WebGLGeometries(ae,ue,nt,qt){const Yt={},Xt=new WeakMap;function onGeometryDispose(ae){const ut=ae.target;null!==ut.index&&ue.remove(ut.index);for(const nt in ut.attributes)ue.remove(ut.attributes[nt]);ut.removeEventListener("dispose",onGeometryDispose),delete Yt[ut.id];const ys=Xt.get(ut);ys&&(ue.remove(ys),Xt.delete(ut)),qt.releaseStatesOfGeometry(ut),!0===ut.isInstancedBufferGeometry&&delete ut._maxInstanceCount,nt.memory.geometries--}function updateWireframeAttribute(ae){const nt=[],qt=ae.index,Yt=ae.attributes.position;let ys=0;if(null!==qt){const ae=qt.array;ys=qt.version;for(let ue=0,ut=ae.length;ue<ut;ue+=3){const ut=ae[ue+0],qt=ae[ue+1],Yt=ae[ue+2];nt.push(ut,qt,qt,Yt,Yt,ut)}}else{if(void 0===Yt)return;{const ae=Yt.array;ys=Yt.version;for(let ue=0,ut=ae.length/3-1;ue<ut;ue+=3){const ae=ue+0,ut=ue+1,qt=ue+2;nt.push(ae,ut,ut,qt,qt,ae)}}}const Ec=new((0,ut.AQS)(nt)?ut.MW4:ut.A$4)(nt,1);Ec.version=ys;const lu=Xt.get(ae);lu&&ue.remove(lu),Xt.set(ae,Ec)}return{get:function(ae,ue){return!0===Yt[ue.id]||(ue.addEventListener("dispose",onGeometryDispose),Yt[ue.id]=!0,nt.memory.geometries++),ue},update:function(nt){const ut=nt.attributes;for(const qt in ut)ue.update(ut[qt],ae.ARRAY_BUFFER)},getWireframeAttribute:function(ae){const ue=Xt.get(ae);if(ue){const nt=ae.index;null!==nt&&ue.version<nt.version&&updateWireframeAttribute(ae)}else updateWireframeAttribute(ae);return Xt.get(ae)}}}function WebGLIndexedBufferRenderer(ae,ue,nt){let ut,qt,Yt;function renderInstances(ue,Xt,ys){0!==ys&&(ae.drawElementsInstanced(ut,Xt,qt,ue*Yt,ys),nt.update(Xt,ut,ys))}this.setMode=function(ae){ut=ae},this.setIndex=function(ae){qt=ae.type,Yt=ae.bytesPerElement},this.render=function(ue,Xt){ae.drawElements(ut,Xt,qt,ue*Yt),nt.update(Xt,ut,1)},this.renderInstances=renderInstances,this.renderMultiDraw=function(ae,Yt,Xt){if(0===Xt)return;ue.get("WEBGL_multi_draw").multiDrawElementsWEBGL(ut,Yt,0,qt,ae,0,Xt);let ys=0;for(let ue=0;ue<Xt;ue++)ys+=Yt[ue];nt.update(ys,ut,1)},this.renderMultiDrawInstances=function(ae,Xt,ys,Ec){if(0===ys)return;const lu=ue.get("WEBGL_multi_draw");if(null===lu)for(let ue=0;ue<ae.length;ue++)renderInstances(ae[ue]/Yt,Xt[ue],Ec[ue]);else{lu.multiDrawElementsInstancedWEBGL(ut,Xt,0,qt,ae,0,Ec,0,ys);let ue=0;for(let ae=0;ae<ys;ae++)ue+=Xt[ae]*Ec[ae];nt.update(ue,ut,1)}}}function WebGLInfo(ae){const ue={frame:0,calls:0,triangles:0,points:0,lines:0};return{memory:{geometries:0,textures:0},render:ue,programs:null,autoReset:!0,reset:function(){ue.calls=0,ue.triangles=0,ue.points=0,ue.lines=0},update:function(nt,ut,qt){switch(ue.calls++,ut){case ae.TRIANGLES:ue.triangles+=qt*(nt/3);break;case ae.LINES:ue.lines+=qt*(nt/2);break;case ae.LINE_STRIP:ue.lines+=qt*(nt-1);break;case ae.LINE_LOOP:ue.lines+=qt*nt;break;case ae.POINTS:ue.points+=qt*nt;break;default:console.error("THREE.WebGLInfo: Unknown draw mode:",ut)}}}}function WebGLMorphtargets(ae,ue,nt){const qt=new WeakMap,Yt=new ut.IUQ;return{update:function(Xt,ys,Ec){const lu=Xt.morphTargetInfluences,uu=ys.morphAttributes.position||ys.morphAttributes.normal||ys.morphAttributes.color,_u=void 0!==uu?uu.length:0;let vu=qt.get(ys);if(void 0===vu||vu.count!==_u){void 0!==vu&&vu.texture.dispose();const wu=void 0!==ys.morphAttributes.position,Hu=void 0!==ys.morphAttributes.normal,qu=void 0!==ys.morphAttributes.color,Ju=ys.morphAttributes.position||[],_h=ys.morphAttributes.normal||[],ed=ys.morphAttributes.color||[];let td=0;!0===wu&&(td=1),!0===Hu&&(td=2),!0===qu&&(td=3);let id=ys.attributes.position.count*td,nd=1;id>ue.maxTextureSize&&(nd=Math.ceil(id/ue.maxTextureSize),id=ue.maxTextureSize);const rd=new Float32Array(id*nd*4*_u),ad=new ut.rFo(rd,id,nd,_u);ad.type=ut.RQf,ad.needsUpdate=!0;const sd=4*td;for(let od=0;od<_u;od++){const ld=Ju[od],cd=_h[od],ud=ed[od],hd=id*nd*4*od;for(let dd=0;dd<ld.count;dd++){const pd=dd*sd;!0===wu&&(Yt.fromBufferAttribute(ld,dd),rd[hd+pd+0]=Yt.x,rd[hd+pd+1]=Yt.y,rd[hd+pd+2]=Yt.z,rd[hd+pd+3]=0),!0===Hu&&(Yt.fromBufferAttribute(cd,dd),rd[hd+pd+4]=Yt.x,rd[hd+pd+5]=Yt.y,rd[hd+pd+6]=Yt.z,rd[hd+pd+7]=0),!0===qu&&(Yt.fromBufferAttribute(ud,dd),rd[hd+pd+8]=Yt.x,rd[hd+pd+9]=Yt.y,rd[hd+pd+10]=Yt.z,rd[hd+pd+11]=4===ud.itemSize?Yt.w:1)}}function disposeTexture(){ad.dispose(),qt.delete(ys),ys.removeEventListener("dispose",disposeTexture)}vu={count:_u,texture:ad,size:new ut.I9Y(id,nd)},qt.set(ys,vu),ys.addEventListener("dispose",disposeTexture)}if(!0===Xt.isInstancedMesh&&null!==Xt.morphTexture)Ec.getUniforms().setValue(ae,"morphTexture",Xt.morphTexture,nt);else{let md=0;for(let fd=0;fd<lu.length;fd++)md+=lu[fd];const gd=ys.morphTargetsRelative?1:1-md;Ec.getUniforms().setValue(ae,"morphTargetBaseInfluence",gd),Ec.getUniforms().setValue(ae,"morphTargetInfluences",lu)}Ec.getUniforms().setValue(ae,"morphTargetsTexture",vu.texture,nt),Ec.getUniforms().setValue(ae,"morphTargetsTextureSize",vu.size)}}}function WebGLObjects(ae,ue,nt,ut){let qt=new WeakMap;function onInstancedMeshDispose(ae){const ue=ae.target;ue.removeEventListener("dispose",onInstancedMeshDispose),nt.remove(ue.instanceMatrix),null!==ue.instanceColor&&nt.remove(ue.instanceColor)}return{update:function(Yt){const Xt=ut.render.frame,ys=Yt.geometry,Ec=ue.get(Yt,ys);if(qt.get(Ec)!==Xt&&(ue.update(Ec),qt.set(Ec,Xt)),Yt.isInstancedMesh&&(!1===Yt.hasEventListener("dispose",onInstancedMeshDispose)&&Yt.addEventListener("dispose",onInstancedMeshDispose),qt.get(Yt)!==Xt&&(nt.update(Yt.instanceMatrix,ae.ARRAY_BUFFER),null!==Yt.instanceColor&&nt.update(Yt.instanceColor,ae.ARRAY_BUFFER),qt.set(Yt,Xt))),Yt.isSkinnedMesh){const ae=Yt.skeleton;qt.get(ae)!==Xt&&(ae.update(),qt.set(ae,Xt))}return Ec},dispose:function(){qt=new WeakMap}}}const rd=new ut.gPd,ad=new ut.VCu(1,1),sd=new ut.rFo,od=new ut.dYF,ld=new ut.b4q,cd=[],ud=[],hd=new Float32Array(16),dd=new Float32Array(9),pd=new Float32Array(4);function flatten(ae,ue,nt){const ut=ae[0];if(ut<=0||ut>0)return ae;const qt=ue*nt;let Yt=cd[qt];if(void 0===Yt&&(Yt=new Float32Array(qt),cd[qt]=Yt),0!==ue){ut.toArray(Yt,0);for(let ut=1,qt=0;ut!==ue;++ut)qt+=nt,ae[ut].toArray(Yt,qt)}return Yt}function arraysEqual(ae,ue){if(ae.length!==ue.length)return!1;for(let nt=0,ut=ae.length;nt<ut;nt++)if(ae[nt]!==ue[nt])return!1;return!0}function copyArray(ae,ue){for(let nt=0,ut=ue.length;nt<ut;nt++)ae[nt]=ue[nt]}function allocTexUnits(ae,ue){let nt=ud[ue];void 0===nt&&(nt=new Int32Array(ue),ud[ue]=nt);for(let ut=0;ut!==ue;++ut)nt[ut]=ae.allocateTextureUnit();return nt}function setValueV1f(ae,ue){const nt=this.cache;nt[0]!==ue&&(ae.uniform1f(this.addr,ue),nt[0]=ue)}function setValueV2f(ae,ue){const nt=this.cache;if(void 0!==ue.x)nt[0]===ue.x&&nt[1]===ue.y||(ae.uniform2f(this.addr,ue.x,ue.y),nt[0]=ue.x,nt[1]=ue.y);else{if(arraysEqual(nt,ue))return;ae.uniform2fv(this.addr,ue),copyArray(nt,ue)}}function setValueV3f(ae,ue){const nt=this.cache;if(void 0!==ue.x)nt[0]===ue.x&&nt[1]===ue.y&&nt[2]===ue.z||(ae.uniform3f(this.addr,ue.x,ue.y,ue.z),nt[0]=ue.x,nt[1]=ue.y,nt[2]=ue.z);else if(void 0!==ue.r)nt[0]===ue.r&&nt[1]===ue.g&&nt[2]===ue.b||(ae.uniform3f(this.addr,ue.r,ue.g,ue.b),nt[0]=ue.r,nt[1]=ue.g,nt[2]=ue.b);else{if(arraysEqual(nt,ue))return;ae.uniform3fv(this.addr,ue),copyArray(nt,ue)}}function setValueV4f(ae,ue){const nt=this.cache;if(void 0!==ue.x)nt[0]===ue.x&&nt[1]===ue.y&&nt[2]===ue.z&&nt[3]===ue.w||(ae.uniform4f(this.addr,ue.x,ue.y,ue.z,ue.w),nt[0]=ue.x,nt[1]=ue.y,nt[2]=ue.z,nt[3]=ue.w);else{if(arraysEqual(nt,ue))return;ae.uniform4fv(this.addr,ue),copyArray(nt,ue)}}function setValueM2(ae,ue){const nt=this.cache,ut=ue.elements;if(void 0===ut){if(arraysEqual(nt,ue))return;ae.uniformMatrix2fv(this.addr,!1,ue),copyArray(nt,ue)}else{if(arraysEqual(nt,ut))return;pd.set(ut),ae.uniformMatrix2fv(this.addr,!1,pd),copyArray(nt,ut)}}function setValueM3(ae,ue){const nt=this.cache,ut=ue.elements;if(void 0===ut){if(arraysEqual(nt,ue))return;ae.uniformMatrix3fv(this.addr,!1,ue),copyArray(nt,ue)}else{if(arraysEqual(nt,ut))return;dd.set(ut),ae.uniformMatrix3fv(this.addr,!1,dd),copyArray(nt,ut)}}function setValueM4(ae,ue){const nt=this.cache,ut=ue.elements;if(void 0===ut){if(arraysEqual(nt,ue))return;ae.uniformMatrix4fv(this.addr,!1,ue),copyArray(nt,ue)}else{if(arraysEqual(nt,ut))return;hd.set(ut),ae.uniformMatrix4fv(this.addr,!1,hd),copyArray(nt,ut)}}function setValueV1i(ae,ue){const nt=this.cache;nt[0]!==ue&&(ae.uniform1i(this.addr,ue),nt[0]=ue)}function setValueV2i(ae,ue){const nt=this.cache;if(void 0!==ue.x)nt[0]===ue.x&&nt[1]===ue.y||(ae.uniform2i(this.addr,ue.x,ue.y),nt[0]=ue.x,nt[1]=ue.y);else{if(arraysEqual(nt,ue))return;ae.uniform2iv(this.addr,ue),copyArray(nt,ue)}}function setValueV3i(ae,ue){const nt=this.cache;if(void 0!==ue.x)nt[0]===ue.x&&nt[1]===ue.y&&nt[2]===ue.z||(ae.uniform3i(this.addr,ue.x,ue.y,ue.z),nt[0]=ue.x,nt[1]=ue.y,nt[2]=ue.z);else{if(arraysEqual(nt,ue))return;ae.uniform3iv(this.addr,ue),copyArray(nt,ue)}}function setValueV4i(ae,ue){const nt=this.cache;if(void 0!==ue.x)nt[0]===ue.x&&nt[1]===ue.y&&nt[2]===ue.z&&nt[3]===ue.w||(ae.uniform4i(this.addr,ue.x,ue.y,ue.z,ue.w),nt[0]=ue.x,nt[1]=ue.y,nt[2]=ue.z,nt[3]=ue.w);else{if(arraysEqual(nt,ue))return;ae.uniform4iv(this.addr,ue),copyArray(nt,ue)}}function setValueV1ui(ae,ue){const nt=this.cache;nt[0]!==ue&&(ae.uniform1ui(this.addr,ue),nt[0]=ue)}function setValueV2ui(ae,ue){const nt=this.cache;if(void 0!==ue.x)nt[0]===ue.x&&nt[1]===ue.y||(ae.uniform2ui(this.addr,ue.x,ue.y),nt[0]=ue.x,nt[1]=ue.y);else{if(arraysEqual(nt,ue))return;ae.uniform2uiv(this.addr,ue),copyArray(nt,ue)}}function setValueV3ui(ae,ue){const nt=this.cache;if(void 0!==ue.x)nt[0]===ue.x&&nt[1]===ue.y&&nt[2]===ue.z||(ae.uniform3ui(this.addr,ue.x,ue.y,ue.z),nt[0]=ue.x,nt[1]=ue.y,nt[2]=ue.z);else{if(arraysEqual(nt,ue))return;ae.uniform3uiv(this.addr,ue),copyArray(nt,ue)}}function setValueV4ui(ae,ue){const nt=this.cache;if(void 0!==ue.x)nt[0]===ue.x&&nt[1]===ue.y&&nt[2]===ue.z&&nt[3]===ue.w||(ae.uniform4ui(this.addr,ue.x,ue.y,ue.z,ue.w),nt[0]=ue.x,nt[1]=ue.y,nt[2]=ue.z,nt[3]=ue.w);else{if(arraysEqual(nt,ue))return;ae.uniform4uiv(this.addr,ue),copyArray(nt,ue)}}function setValueT1(ae,ue,nt){const qt=this.cache,Yt=nt.allocateTextureUnit();let Xt;qt[0]!==Yt&&(ae.uniform1i(this.addr,Yt),qt[0]=Yt),this.type===ae.SAMPLER_2D_SHADOW?(ad.compareFunction=ut.TiK,Xt=ad):Xt=rd,nt.setTexture2D(ue||Xt,Yt)}function setValueT3D1(ae,ue,nt){const ut=this.cache,qt=nt.allocateTextureUnit();ut[0]!==qt&&(ae.uniform1i(this.addr,qt),ut[0]=qt),nt.setTexture3D(ue||od,qt)}function setValueT6(ae,ue,nt){const ut=this.cache,qt=nt.allocateTextureUnit();ut[0]!==qt&&(ae.uniform1i(this.addr,qt),ut[0]=qt),nt.setTextureCube(ue||ld,qt)}function setValueT2DArray1(ae,ue,nt){const ut=this.cache,qt=nt.allocateTextureUnit();ut[0]!==qt&&(ae.uniform1i(this.addr,qt),ut[0]=qt),nt.setTexture2DArray(ue||sd,qt)}function setValueV1fArray(ae,ue){ae.uniform1fv(this.addr,ue)}function setValueV2fArray(ae,ue){const nt=flatten(ue,this.size,2);ae.uniform2fv(this.addr,nt)}function setValueV3fArray(ae,ue){const nt=flatten(ue,this.size,3);ae.uniform3fv(this.addr,nt)}function setValueV4fArray(ae,ue){const nt=flatten(ue,this.size,4);ae.uniform4fv(this.addr,nt)}function setValueM2Array(ae,ue){const nt=flatten(ue,this.size,4);ae.uniformMatrix2fv(this.addr,!1,nt)}function setValueM3Array(ae,ue){const nt=flatten(ue,this.size,9);ae.uniformMatrix3fv(this.addr,!1,nt)}function setValueM4Array(ae,ue){const nt=flatten(ue,this.size,16);ae.uniformMatrix4fv(this.addr,!1,nt)}function setValueV1iArray(ae,ue){ae.uniform1iv(this.addr,ue)}function setValueV2iArray(ae,ue){ae.uniform2iv(this.addr,ue)}function setValueV3iArray(ae,ue){ae.uniform3iv(this.addr,ue)}function setValueV4iArray(ae,ue){ae.uniform4iv(this.addr,ue)}function setValueV1uiArray(ae,ue){ae.uniform1uiv(this.addr,ue)}function setValueV2uiArray(ae,ue){ae.uniform2uiv(this.addr,ue)}function setValueV3uiArray(ae,ue){ae.uniform3uiv(this.addr,ue)}function setValueV4uiArray(ae,ue){ae.uniform4uiv(this.addr,ue)}function setValueT1Array(ae,ue,nt){const ut=this.cache,qt=ue.length,Yt=allocTexUnits(nt,qt);arraysEqual(ut,Yt)||(ae.uniform1iv(this.addr,Yt),copyArray(ut,Yt));for(let Xt=0;Xt!==qt;++Xt)nt.setTexture2D(ue[Xt]||rd,Yt[Xt])}function setValueT3DArray(ae,ue,nt){const ut=this.cache,qt=ue.length,Yt=allocTexUnits(nt,qt);arraysEqual(ut,Yt)||(ae.uniform1iv(this.addr,Yt),copyArray(ut,Yt));for(let Xt=0;Xt!==qt;++Xt)nt.setTexture3D(ue[Xt]||od,Yt[Xt])}function setValueT6Array(ae,ue,nt){const ut=this.cache,qt=ue.length,Yt=allocTexUnits(nt,qt);arraysEqual(ut,Yt)||(ae.uniform1iv(this.addr,Yt),copyArray(ut,Yt));for(let Xt=0;Xt!==qt;++Xt)nt.setTextureCube(ue[Xt]||ld,Yt[Xt])}function setValueT2DArrayArray(ae,ue,nt){const ut=this.cache,qt=ue.length,Yt=allocTexUnits(nt,qt);arraysEqual(ut,Yt)||(ae.uniform1iv(this.addr,Yt),copyArray(ut,Yt));for(let Xt=0;Xt!==qt;++Xt)nt.setTexture2DArray(ue[Xt]||sd,Yt[Xt])}class SingleUniform{constructor(ae,ue,nt){this.id=ae,this.addr=nt,this.cache=[],this.type=ue.type,this.setValue=function(ae){switch(ae){case 5126:return setValueV1f;case 35664:return setValueV2f;case 35665:return setValueV3f;case 35666:return setValueV4f;case 35674:return setValueM2;case 35675:return setValueM3;case 35676:return setValueM4;case 5124:case 35670:return setValueV1i;case 35667:case 35671:return setValueV2i;case 35668:case 35672:return setValueV3i;case 35669:case 35673:return setValueV4i;case 5125:return setValueV1ui;case 36294:return setValueV2ui;case 36295:return setValueV3ui;case 36296:return setValueV4ui;case 35678:case 36198:case 36298:case 36306:case 35682:return setValueT1;case 35679:case 36299:case 36307:return setValueT3D1;case 35680:case 36300:case 36308:case 36293:return setValueT6;case 36289:case 36303:case 36311:case 36292:return setValueT2DArray1}}(ue.type)}}class PureArrayUniform{constructor(ae,ue,nt){this.id=ae,this.addr=nt,this.cache=[],this.type=ue.type,this.size=ue.size,this.setValue=function(ae){switch(ae){case 5126:return setValueV1fArray;case 35664:return setValueV2fArray;case 35665:return setValueV3fArray;case 35666:return setValueV4fArray;case 35674:return setValueM2Array;case 35675:return setValueM3Array;case 35676:return setValueM4Array;case 5124:case 35670:return setValueV1iArray;case 35667:case 35671:return setValueV2iArray;case 35668:case 35672:return setValueV3iArray;case 35669:case 35673:return setValueV4iArray;case 5125:return setValueV1uiArray;case 36294:return setValueV2uiArray;case 36295:return setValueV3uiArray;case 36296:return setValueV4uiArray;case 35678:case 36198:case 36298:case 36306:case 35682:return setValueT1Array;case 35679:case 36299:case 36307:return setValueT3DArray;case 35680:case 36300:case 36308:case 36293:return setValueT6Array;case 36289:case 36303:case 36311:case 36292:return setValueT2DArrayArray}}(ue.type)}}class StructuredUniform{constructor(ae){this.id=ae,this.seq=[],this.map={}}setValue(ae,ue,nt){const ut=this.seq;for(let qt=0,Yt=ut.length;qt!==Yt;++qt){const Yt=ut[qt];Yt.setValue(ae,ue[Yt.id],nt)}}}const md=/(\w+)(\])?(\[|\.)?/g;function addUniform(ae,ue){ae.seq.push(ue),ae.map[ue.id]=ue}function parseUniform(ae,ue,nt){const ut=ae.name,qt=ut.length;for(md.lastIndex=0;;){const Yt=md.exec(ut),Xt=md.lastIndex;let ys=Yt[1];const Ec="]"===Yt[2],lu=Yt[3];if(Ec&&(ys|=0),void 0===lu||"["===lu&&Xt+2===qt){addUniform(nt,void 0===lu?new SingleUniform(ys,ae,ue):new PureArrayUniform(ys,ae,ue));break}{let ae=nt.map[ys];void 0===ae&&(ae=new StructuredUniform(ys),addUniform(nt,ae)),nt=ae}}}class WebGLUniforms{constructor(ae,ue){this.seq=[],this.map={};const nt=ae.getProgramParameter(ue,ae.ACTIVE_UNIFORMS);for(let ut=0;ut<nt;++ut){const nt=ae.getActiveUniform(ue,ut);parseUniform(nt,ae.getUniformLocation(ue,nt.name),this)}}setValue(ae,ue,nt,ut){const qt=this.map[ue];void 0!==qt&&qt.setValue(ae,nt,ut)}setOptional(ae,ue,nt){const ut=ue[nt];void 0!==ut&&this.setValue(ae,nt,ut)}static upload(ae,ue,nt,ut){for(let qt=0,Yt=ue.length;qt!==Yt;++qt){const Yt=ue[qt],Xt=nt[Yt.id];!1!==Xt.needsUpdate&&Yt.setValue(ae,Xt.value,ut)}}static seqWithValue(ae,ue){const nt=[];for(let ut=0,qt=ae.length;ut!==qt;++ut){const qt=ae[ut];qt.id in ue&&nt.push(qt)}return nt}}function WebGLShader(ae,ue,nt){const ut=ae.createShader(ue);return ae.shaderSource(ut,nt),ae.compileShader(ut),ut}let gd=0;const fd=new ut.dwI;function getShaderErrors(ae,ue,nt){const ut=ae.getShaderParameter(ue,ae.COMPILE_STATUS),qt=(ae.getShaderInfoLog(ue)||"").trim();if(ut&&""===qt)return"";const Yt=/ERROR: 0:(\d+)/.exec(qt);if(Yt){const ut=parseInt(Yt[1]);return nt.toUpperCase()+"\n\n"+qt+"\n\n"+function(ae,ue){const nt=ae.split("\n"),ut=[],qt=Math.max(ue-6,0),Yt=Math.min(ue+6,nt.length);for(let Xt=qt;Xt<Yt;Xt++){const ae=Xt+1;ut.push(`${ae===ue?">":" "} ${ae}: ${nt[Xt]}`)}return ut.join("\n")}(ae.getShaderSource(ue),ut)}return qt}function getTexelEncodingFunction(ae,ue){const nt=function(ae){ut.ppV._getMatrix(fd,ut.ppV.workingColorSpace,ae);const ue=`mat3( ${fd.elements.map((ae=>ae.toFixed(4)))} )`;switch(ut.ppV.getTransfer(ae)){case ut.VxR:return[ue,"LinearTransferOETF"];case ut.KLL:return[ue,"sRGBTransferOETF"];default:return console.warn("THREE.WebGLProgram: Unsupported color space: ",ae),[ue,"LinearTransferOETF"]}}(ue);return[`vec4 ${ae}( vec4 value ) {`,`\treturn ${nt[1]}( vec4( value.rgb * ${nt[0]}, value.a ) );`,"}"].join("\n")}function getToneMappingFunction(ae,ue){let nt;switch(ue){case ut.kyO:nt="Linear";break;case ut.Mjd:nt="Reinhard";break;case ut.nNL:nt="Cineon";break;case ut.FV:nt="ACESFilmic";break;case ut.LAk:nt="AgX";break;case ut.aJ8:nt="Neutral";break;case ut.g7M:nt="Custom";break;default:console.warn("THREE.WebGLProgram: Unsupported toneMapping:",ue),nt="Linear"}return"vec3 "+ae+"( vec3 color ) { return "+nt+"ToneMapping( color ); }"}const Ad=new ut.Pq0;function getLuminanceFunction(){ut.ppV.getLuminanceCoefficients(Ad);return["float luminance( const in vec3 rgb ) {",`\tconst vec3 weights = vec3( ${Ad.x.toFixed(4)}, ${Ad.y.toFixed(4)}, ${Ad.z.toFixed(4)} );`,"\treturn dot( weights, rgb );","}"].join("\n")}function filterEmptyLine(ae){return""!==ae}function replaceLightNums(ae,ue){const nt=ue.numSpotLightShadows+ue.numSpotLightMaps-ue.numSpotLightShadowsWithMaps;return ae.replace(/NUM_DIR_LIGHTS/g,ue.numDirLights).replace(/NUM_SPOT_LIGHTS/g,ue.numSpotLights).replace(/NUM_SPOT_LIGHT_MAPS/g,ue.numSpotLightMaps).replace(/NUM_SPOT_LIGHT_COORDS/g,nt).replace(/NUM_RECT_AREA_LIGHTS/g,ue.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,ue.numPointLights).replace(/NUM_HEMI_LIGHTS/g,ue.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g,ue.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g,ue.numSpotLightShadowsWithMaps).replace(/NUM_SPOT_LIGHT_SHADOWS/g,ue.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g,ue.numPointLightShadows)}function replaceClippingPlaneNums(ae,ue){return ae.replace(/NUM_CLIPPING_PLANES/g,ue.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g,ue.numClippingPlanes-ue.numClipIntersection)}const yd=/^[ \t]*#include +<([\w\d./]+)>/gm;function resolveIncludes(ae){return ae.replace(yd,includeReplacer)}const _d=new Map;function includeReplacer(ae,ue){let nt=qt[ue];if(void 0===nt){const ae=_d.get(ue);if(void 0===ae)throw new Error("Can not resolve #include <"+ue+">");nt=qt[ae],console.warn('THREE.WebGLRenderer: Shader chunk "%s" has been deprecated. Use "%s" instead.',ue,ae)}return resolveIncludes(nt)}const vd=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function unrollLoops(ae){return ae.replace(vd,loopReplacer)}function loopReplacer(ae,ue,nt,ut){let qt="";for(let Yt=parseInt(ue);Yt<parseInt(nt);Yt++)qt+=ut.replace(/\[\s*i\s*\]/g,"[ "+Yt+" ]").replace(/UNROLLED_LOOP_INDEX/g,Yt);return qt}function generatePrecision(ae){let ue=`precision ${ae.precision} float;\n\tprecision ${ae.precision} int;\n\tprecision ${ae.precision} sampler2D;\n\tprecision ${ae.precision} samplerCube;\n\tprecision ${ae.precision} sampler3D;\n\tprecision ${ae.precision} sampler2DArray;\n\tprecision ${ae.precision} sampler2DShadow;\n\tprecision ${ae.precision} samplerCubeShadow;\n\tprecision ${ae.precision} sampler2DArrayShadow;\n\tprecision ${ae.precision} isampler2D;\n\tprecision ${ae.precision} isampler3D;\n\tprecision ${ae.precision} isamplerCube;\n\tprecision ${ae.precision} isampler2DArray;\n\tprecision ${ae.precision} usampler2D;\n\tprecision ${ae.precision} usampler3D;\n\tprecision ${ae.precision} usamplerCube;\n\tprecision ${ae.precision} usampler2DArray;\n\t`;return"highp"===ae.precision?ue+="\n#define HIGH_PRECISION":"mediump"===ae.precision?ue+="\n#define MEDIUM_PRECISION":"lowp"===ae.precision&&(ue+="\n#define LOW_PRECISION"),ue}function WebGLProgram(ae,ue,nt,Yt){const Xt=ae.getContext(),ys=nt.defines;let Ec=nt.vertexShader,lu=nt.fragmentShader;const uu=function(ae){let ue="SHADOWMAP_TYPE_BASIC";return ae.shadowMapType===ut.QP0?ue="SHADOWMAP_TYPE_PCF":ae.shadowMapType===ut.Wk7?ue="SHADOWMAP_TYPE_PCF_SOFT":ae.shadowMapType===ut.RyA&&(ue="SHADOWMAP_TYPE_VSM"),ue}(nt),_u=function(ae){let ue="ENVMAP_TYPE_CUBE";if(ae.envMap)switch(ae.envMapMode){case ut.hy7:case ut.xFO:ue="ENVMAP_TYPE_CUBE";break;case ut.Om:ue="ENVMAP_TYPE_CUBE_UV"}return ue}(nt),vu=function(ae){let ue="ENVMAP_MODE_REFLECTION";ae.envMap&&ae.envMapMode===ut.xFO&&(ue="ENVMAP_MODE_REFRACTION");return ue}(nt),wu=function(ae){let ue="ENVMAP_BLENDING_NONE";if(ae.envMap)switch(ae.combine){case ut.caT:ue="ENVMAP_BLENDING_MULTIPLY";break;case ut.KRh:ue="ENVMAP_BLENDING_MIX";break;case ut.XrR:ue="ENVMAP_BLENDING_ADD"}return ue}(nt),Hu=function(ae){const ue=ae.envMapCubeUVHeight;if(null===ue)return null;const nt=Math.log2(ue)-2,ut=1/ue;return{texelWidth:1/(3*Math.max(Math.pow(2,nt),112)),texelHeight:ut,maxMip:nt}}(nt),qu=function(ae){return[ae.extensionClipCullDistance?"#extension GL_ANGLE_clip_cull_distance : require":"",ae.extensionMultiDraw?"#extension GL_ANGLE_multi_draw : require":""].filter(filterEmptyLine).join("\n")}(nt),Ju=function(ae){const ue=[];for(const nt in ae){const ut=ae[nt];!1!==ut&&ue.push("#define "+nt+" "+ut)}return ue.join("\n")}(ys),_h=Xt.createProgram();let ed,td,id=nt.glslVersion?"#version "+nt.glslVersion+"\n":"";nt.isRawShaderMaterial?(ed=["#define SHADER_TYPE "+nt.shaderType,"#define SHADER_NAME "+nt.shaderName,Ju].filter(filterEmptyLine).join("\n"),ed.length>0&&(ed+="\n"),td=["#define SHADER_TYPE "+nt.shaderType,"#define SHADER_NAME "+nt.shaderName,Ju].filter(filterEmptyLine).join("\n"),td.length>0&&(td+="\n")):(ed=[generatePrecision(nt),"#define SHADER_TYPE "+nt.shaderType,"#define SHADER_NAME "+nt.shaderName,Ju,nt.extensionClipCullDistance?"#define USE_CLIP_DISTANCE":"",nt.batching?"#define USE_BATCHING":"",nt.batchingColor?"#define USE_BATCHING_COLOR":"",nt.instancing?"#define USE_INSTANCING":"",nt.instancingColor?"#define USE_INSTANCING_COLOR":"",nt.instancingMorph?"#define USE_INSTANCING_MORPH":"",nt.useFog&&nt.fog?"#define USE_FOG":"",nt.useFog&&nt.fogExp2?"#define FOG_EXP2":"",nt.map?"#define USE_MAP":"",nt.envMap?"#define USE_ENVMAP":"",nt.envMap?"#define "+vu:"",nt.lightMap?"#define USE_LIGHTMAP":"",nt.aoMap?"#define USE_AOMAP":"",nt.bumpMap?"#define USE_BUMPMAP":"",nt.normalMap?"#define USE_NORMALMAP":"",nt.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",nt.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",nt.displacementMap?"#define USE_DISPLACEMENTMAP":"",nt.emissiveMap?"#define USE_EMISSIVEMAP":"",nt.anisotropy?"#define USE_ANISOTROPY":"",nt.anisotropyMap?"#define USE_ANISOTROPYMAP":"",nt.clearcoatMap?"#define USE_CLEARCOATMAP":"",nt.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",nt.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",nt.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",nt.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",nt.specularMap?"#define USE_SPECULARMAP":"",nt.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",nt.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",nt.roughnessMap?"#define USE_ROUGHNESSMAP":"",nt.metalnessMap?"#define USE_METALNESSMAP":"",nt.alphaMap?"#define USE_ALPHAMAP":"",nt.alphaHash?"#define USE_ALPHAHASH":"",nt.transmission?"#define USE_TRANSMISSION":"",nt.transmissionMap?"#define USE_TRANSMISSIONMAP":"",nt.thicknessMap?"#define USE_THICKNESSMAP":"",nt.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",nt.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",nt.mapUv?"#define MAP_UV "+nt.mapUv:"",nt.alphaMapUv?"#define ALPHAMAP_UV "+nt.alphaMapUv:"",nt.lightMapUv?"#define LIGHTMAP_UV "+nt.lightMapUv:"",nt.aoMapUv?"#define AOMAP_UV "+nt.aoMapUv:"",nt.emissiveMapUv?"#define EMISSIVEMAP_UV "+nt.emissiveMapUv:"",nt.bumpMapUv?"#define BUMPMAP_UV "+nt.bumpMapUv:"",nt.normalMapUv?"#define NORMALMAP_UV "+nt.normalMapUv:"",nt.displacementMapUv?"#define DISPLACEMENTMAP_UV "+nt.displacementMapUv:"",nt.metalnessMapUv?"#define METALNESSMAP_UV "+nt.metalnessMapUv:"",nt.roughnessMapUv?"#define ROUGHNESSMAP_UV "+nt.roughnessMapUv:"",nt.anisotropyMapUv?"#define ANISOTROPYMAP_UV "+nt.anisotropyMapUv:"",nt.clearcoatMapUv?"#define CLEARCOATMAP_UV "+nt.clearcoatMapUv:"",nt.clearcoatNormalMapUv?"#define CLEARCOAT_NORMALMAP_UV "+nt.clearcoatNormalMapUv:"",nt.clearcoatRoughnessMapUv?"#define CLEARCOAT_ROUGHNESSMAP_UV "+nt.clearcoatRoughnessMapUv:"",nt.iridescenceMapUv?"#define IRIDESCENCEMAP_UV "+nt.iridescenceMapUv:"",nt.iridescenceThicknessMapUv?"#define IRIDESCENCE_THICKNESSMAP_UV "+nt.iridescenceThicknessMapUv:"",nt.sheenColorMapUv?"#define SHEEN_COLORMAP_UV "+nt.sheenColorMapUv:"",nt.sheenRoughnessMapUv?"#define SHEEN_ROUGHNESSMAP_UV "+nt.sheenRoughnessMapUv:"",nt.specularMapUv?"#define SPECULARMAP_UV "+nt.specularMapUv:"",nt.specularColorMapUv?"#define SPECULAR_COLORMAP_UV "+nt.specularColorMapUv:"",nt.specularIntensityMapUv?"#define SPECULAR_INTENSITYMAP_UV "+nt.specularIntensityMapUv:"",nt.transmissionMapUv?"#define TRANSMISSIONMAP_UV "+nt.transmissionMapUv:"",nt.thicknessMapUv?"#define THICKNESSMAP_UV "+nt.thicknessMapUv:"",nt.vertexTangents&&!1===nt.flatShading?"#define USE_TANGENT":"",nt.vertexColors?"#define USE_COLOR":"",nt.vertexAlphas?"#define USE_COLOR_ALPHA":"",nt.vertexUv1s?"#define USE_UV1":"",nt.vertexUv2s?"#define USE_UV2":"",nt.vertexUv3s?"#define USE_UV3":"",nt.pointsUvs?"#define USE_POINTS_UV":"",nt.flatShading?"#define FLAT_SHADED":"",nt.skinning?"#define USE_SKINNING":"",nt.morphTargets?"#define USE_MORPHTARGETS":"",nt.morphNormals&&!1===nt.flatShading?"#define USE_MORPHNORMALS":"",nt.morphColors?"#define USE_MORPHCOLORS":"",nt.morphTargetsCount>0?"#define MORPHTARGETS_TEXTURE_STRIDE "+nt.morphTextureStride:"",nt.morphTargetsCount>0?"#define MORPHTARGETS_COUNT "+nt.morphTargetsCount:"",nt.doubleSided?"#define DOUBLE_SIDED":"",nt.flipSided?"#define FLIP_SIDED":"",nt.shadowMapEnabled?"#define USE_SHADOWMAP":"",nt.shadowMapEnabled?"#define "+uu:"",nt.sizeAttenuation?"#define USE_SIZEATTENUATION":"",nt.numLightProbes>0?"#define USE_LIGHT_PROBES":"",nt.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",nt.reversedDepthBuffer?"#define USE_REVERSEDEPTHBUF":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING","\tattribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR","\tattribute vec3 instanceColor;","#endif","#ifdef USE_INSTANCING_MORPH","\tuniform sampler2D morphTexture;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_UV1","\tattribute vec2 uv1;","#endif","#ifdef USE_UV2","\tattribute vec2 uv2;","#endif","#ifdef USE_UV3","\tattribute vec2 uv3;","#endif","#ifdef USE_TANGENT","\tattribute vec4 tangent;","#endif","#if defined( USE_COLOR_ALPHA )","\tattribute vec4 color;","#elif defined( USE_COLOR )","\tattribute vec3 color;","#endif","#ifdef USE_SKINNING","\tattribute vec4 skinIndex;","\tattribute vec4 skinWeight;","#endif","\n"].filter(filterEmptyLine).join("\n"),td=[generatePrecision(nt),"#define SHADER_TYPE "+nt.shaderType,"#define SHADER_NAME "+nt.shaderName,Ju,nt.useFog&&nt.fog?"#define USE_FOG":"",nt.useFog&&nt.fogExp2?"#define FOG_EXP2":"",nt.alphaToCoverage?"#define ALPHA_TO_COVERAGE":"",nt.map?"#define USE_MAP":"",nt.matcap?"#define USE_MATCAP":"",nt.envMap?"#define USE_ENVMAP":"",nt.envMap?"#define "+_u:"",nt.envMap?"#define "+vu:"",nt.envMap?"#define "+wu:"",Hu?"#define CUBEUV_TEXEL_WIDTH "+Hu.texelWidth:"",Hu?"#define CUBEUV_TEXEL_HEIGHT "+Hu.texelHeight:"",Hu?"#define CUBEUV_MAX_MIP "+Hu.maxMip+".0":"",nt.lightMap?"#define USE_LIGHTMAP":"",nt.aoMap?"#define USE_AOMAP":"",nt.bumpMap?"#define USE_BUMPMAP":"",nt.normalMap?"#define USE_NORMALMAP":"",nt.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",nt.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",nt.emissiveMap?"#define USE_EMISSIVEMAP":"",nt.anisotropy?"#define USE_ANISOTROPY":"",nt.anisotropyMap?"#define USE_ANISOTROPYMAP":"",nt.clearcoat?"#define USE_CLEARCOAT":"",nt.clearcoatMap?"#define USE_CLEARCOATMAP":"",nt.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",nt.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",nt.dispersion?"#define USE_DISPERSION":"",nt.iridescence?"#define USE_IRIDESCENCE":"",nt.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",nt.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",nt.specularMap?"#define USE_SPECULARMAP":"",nt.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",nt.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",nt.roughnessMap?"#define USE_ROUGHNESSMAP":"",nt.metalnessMap?"#define USE_METALNESSMAP":"",nt.alphaMap?"#define USE_ALPHAMAP":"",nt.alphaTest?"#define USE_ALPHATEST":"",nt.alphaHash?"#define USE_ALPHAHASH":"",nt.sheen?"#define USE_SHEEN":"",nt.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",nt.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",nt.transmission?"#define USE_TRANSMISSION":"",nt.transmissionMap?"#define USE_TRANSMISSIONMAP":"",nt.thicknessMap?"#define USE_THICKNESSMAP":"",nt.vertexTangents&&!1===nt.flatShading?"#define USE_TANGENT":"",nt.vertexColors||nt.instancingColor||nt.batchingColor?"#define USE_COLOR":"",nt.vertexAlphas?"#define USE_COLOR_ALPHA":"",nt.vertexUv1s?"#define USE_UV1":"",nt.vertexUv2s?"#define USE_UV2":"",nt.vertexUv3s?"#define USE_UV3":"",nt.pointsUvs?"#define USE_POINTS_UV":"",nt.gradientMap?"#define USE_GRADIENTMAP":"",nt.flatShading?"#define FLAT_SHADED":"",nt.doubleSided?"#define DOUBLE_SIDED":"",nt.flipSided?"#define FLIP_SIDED":"",nt.shadowMapEnabled?"#define USE_SHADOWMAP":"",nt.shadowMapEnabled?"#define "+uu:"",nt.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",nt.numLightProbes>0?"#define USE_LIGHT_PROBES":"",nt.decodeVideoTexture?"#define DECODE_VIDEO_TEXTURE":"",nt.decodeVideoTextureEmissive?"#define DECODE_VIDEO_TEXTURE_EMISSIVE":"",nt.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",nt.reversedDepthBuffer?"#define USE_REVERSEDEPTHBUF":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",nt.toneMapping!==ut.y_p?"#define TONE_MAPPING":"",nt.toneMapping!==ut.y_p?qt.tonemapping_pars_fragment:"",nt.toneMapping!==ut.y_p?getToneMappingFunction("toneMapping",nt.toneMapping):"",nt.dithering?"#define DITHERING":"",nt.opaque?"#define OPAQUE":"",qt.colorspace_pars_fragment,getTexelEncodingFunction("linearToOutputTexel",nt.outputColorSpace),getLuminanceFunction(),nt.useDepthPacking?"#define DEPTH_PACKING "+nt.depthPacking:"","\n"].filter(filterEmptyLine).join("\n")),Ec=resolveIncludes(Ec),Ec=replaceLightNums(Ec,nt),Ec=replaceClippingPlaneNums(Ec,nt),lu=resolveIncludes(lu),lu=replaceLightNums(lu,nt),lu=replaceClippingPlaneNums(lu,nt),Ec=unrollLoops(Ec),lu=unrollLoops(lu),!0!==nt.isRawShaderMaterial&&(id="#version 300 es\n",ed=[qu,"#define attribute in","#define varying out","#define texture2D texture"].join("\n")+"\n"+ed,td=["#define varying in",nt.glslVersion===ut.Wdf?"":"layout(location = 0) out highp vec4 pc_fragColor;",nt.glslVersion===ut.Wdf?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join("\n")+"\n"+td);const nd=id+ed+Ec,rd=id+td+lu,ad=WebGLShader(Xt,Xt.VERTEX_SHADER,nd),sd=WebGLShader(Xt,Xt.FRAGMENT_SHADER,rd);function onFirstUse(ue){if(ae.debug.checkShaderErrors){const nt=Xt.getProgramInfoLog(_h)||"",ut=Xt.getShaderInfoLog(ad)||"",qt=Xt.getShaderInfoLog(sd)||"",Yt=nt.trim(),ys=ut.trim(),Ec=qt.trim();let lu=!0,uu=!0;if(!1===Xt.getProgramParameter(_h,Xt.LINK_STATUS))if(lu=!1,"function"===typeof ae.debug.onShaderError)ae.debug.onShaderError(Xt,_h,ad,sd);else{const ae=getShaderErrors(Xt,ad,"vertex"),nt=getShaderErrors(Xt,sd,"fragment");console.error("THREE.WebGLProgram: Shader Error "+Xt.getError()+" - VALIDATE_STATUS "+Xt.getProgramParameter(_h,Xt.VALIDATE_STATUS)+"\n\nMaterial Name: "+ue.name+"\nMaterial Type: "+ue.type+"\n\nProgram Info Log: "+Yt+"\n"+ae+"\n"+nt)}else""!==Yt?console.warn("THREE.WebGLProgram: Program Info Log:",Yt):""!==ys&&""!==Ec||(uu=!1);uu&&(ue.diagnostics={runnable:lu,programLog:Yt,vertexShader:{log:ys,prefix:ed},fragmentShader:{log:Ec,prefix:td}})}Xt.deleteShader(ad),Xt.deleteShader(sd),od=new WebGLUniforms(Xt,_h),ld=function(ae,ue){const nt={},ut=ae.getProgramParameter(ue,ae.ACTIVE_ATTRIBUTES);for(let qt=0;qt<ut;qt++){const ut=ae.getActiveAttrib(ue,qt),Yt=ut.name;let Xt=1;ut.type===ae.FLOAT_MAT2&&(Xt=2),ut.type===ae.FLOAT_MAT3&&(Xt=3),ut.type===ae.FLOAT_MAT4&&(Xt=4),nt[Yt]={type:ut.type,location:ae.getAttribLocation(ue,Yt),locationSize:Xt}}return nt}(Xt,_h)}let od,ld;Xt.attachShader(_h,ad),Xt.attachShader(_h,sd),void 0!==nt.index0AttributeName?Xt.bindAttribLocation(_h,0,nt.index0AttributeName):!0===nt.morphTargets&&Xt.bindAttribLocation(_h,0,"position"),Xt.linkProgram(_h),this.getUniforms=function(){return void 0===od&&onFirstUse(this),od},this.getAttributes=function(){return void 0===ld&&onFirstUse(this),ld};let cd=!1===nt.rendererExtensionParallelShaderCompile;return this.isReady=function(){return!1===cd&&(cd=Xt.getProgramParameter(_h,37297)),cd},this.destroy=function(){Yt.releaseStatesOfProgram(this),Xt.deleteProgram(_h),this.program=void 0},this.type=nt.shaderType,this.name=nt.shaderName,this.id=gd++,this.cacheKey=ue,this.usedTimes=1,this.program=_h,this.vertexShader=ad,this.fragmentShader=sd,this}let xd=0;class WebGLShaderCache{constructor(){this.shaderCache=new Map,this.materialCache=new Map}update(ae){const ue=ae.vertexShader,nt=ae.fragmentShader,ut=this._getShaderStage(ue),qt=this._getShaderStage(nt),Yt=this._getShaderCacheForMaterial(ae);return!1===Yt.has(ut)&&(Yt.add(ut),ut.usedTimes++),!1===Yt.has(qt)&&(Yt.add(qt),qt.usedTimes++),this}remove(ae){const ue=this.materialCache.get(ae);for(const nt of ue)nt.usedTimes--,0===nt.usedTimes&&this.shaderCache.delete(nt.code);return this.materialCache.delete(ae),this}getVertexShaderID(ae){return this._getShaderStage(ae.vertexShader).id}getFragmentShaderID(ae){return this._getShaderStage(ae.fragmentShader).id}dispose(){this.shaderCache.clear(),this.materialCache.clear()}_getShaderCacheForMaterial(ae){const ue=this.materialCache;let nt=ue.get(ae);return void 0===nt&&(nt=new Set,ue.set(ae,nt)),nt}_getShaderStage(ae){const ue=this.shaderCache;let nt=ue.get(ae);return void 0===nt&&(nt=new WebGLShaderStage(ae),ue.set(ae,nt)),nt}}class WebGLShaderStage{constructor(ae){this.id=xd++,this.code=ae,this.usedTimes=0}}function WebGLPrograms(ae,ue,nt,qt,Yt,ys,Ec){const lu=new ut.zgK,uu=new WebGLShaderCache,_u=new Set,vu=[],wu=Yt.logarithmicDepthBuffer,Hu=Yt.vertexTextures;let qu=Yt.precision;const Ju={MeshDepthMaterial:"depth",MeshDistanceMaterial:"distanceRGBA",MeshNormalMaterial:"normal",MeshBasicMaterial:"basic",MeshLambertMaterial:"lambert",MeshPhongMaterial:"phong",MeshToonMaterial:"toon",MeshStandardMaterial:"physical",MeshPhysicalMaterial:"physical",MeshMatcapMaterial:"matcap",LineBasicMaterial:"basic",LineDashedMaterial:"dashed",PointsMaterial:"points",ShadowMaterial:"shadow",SpriteMaterial:"sprite"};function getChannel(ae){return _u.add(ae),0===ae?"uv":`uv${ae}`}return{getParameters:function(ys,lu,vu,_h,ed){const td=_h.fog,id=ed.geometry,nd=ys.isMeshStandardMaterial?_h.environment:null,rd=(ys.isMeshStandardMaterial?nt:ue).get(ys.envMap||nd),ad=rd&&rd.mapping===ut.Om?rd.image.height:null,sd=Ju[ys.type];null!==ys.precision&&(qu=Yt.getMaxPrecision(ys.precision),qu!==ys.precision&&console.warn("THREE.WebGLProgram.getParameters:",ys.precision,"not supported, using",qu,"instead."));const od=id.morphAttributes.position||id.morphAttributes.normal||id.morphAttributes.color,ld=void 0!==od?od.length:0;let cd,ud,hd,dd,pd=0;if(void 0!==id.morphAttributes.position&&(pd=1),void 0!==id.morphAttributes.normal&&(pd=2),void 0!==id.morphAttributes.color&&(pd=3),sd){const ae=Xt[sd];cd=ae.vertexShader,ud=ae.fragmentShader}else cd=ys.vertexShader,ud=ys.fragmentShader,uu.update(ys),hd=uu.getVertexShaderID(ys),dd=uu.getFragmentShaderID(ys);const md=ae.getRenderTarget(),gd=ae.state.buffers.depth.getReversed(),fd=!0===ed.isInstancedMesh,Ad=!0===ed.isBatchedMesh,yd=!!ys.map,_d=!!ys.matcap,vd=!!rd,xd=!!ys.aoMap,bd=!!ys.lightMap,wd=!!ys.bumpMap,Ed=!!ys.normalMap,Md=!!ys.displacementMap,Sd=!!ys.emissiveMap,Td=!!ys.metalnessMap,kd=!!ys.roughnessMap,Cd=ys.anisotropy>0,Id=ys.clearcoat>0,Dd=ys.dispersion>0,Ld=ys.iridescence>0,Pd=ys.sheen>0,zd=ys.transmission>0,Nd=Cd&&!!ys.anisotropyMap,Rd=Id&&!!ys.clearcoatMap,Od=Id&&!!ys.clearcoatNormalMap,Bd=Id&&!!ys.clearcoatRoughnessMap,Fd=Ld&&!!ys.iridescenceMap,jd=Ld&&!!ys.iridescenceThicknessMap,Ud=Pd&&!!ys.sheenColorMap,Vd=Pd&&!!ys.sheenRoughnessMap,Gd=!!ys.specularMap,Hd=!!ys.specularColorMap,Wd=!!ys.specularIntensityMap,qd=zd&&!!ys.transmissionMap,Zd=zd&&!!ys.thicknessMap,Yd=!!ys.gradientMap,Qd=!!ys.alphaMap,Kd=ys.alphaTest>0,Xd=!!ys.alphaHash,Jd=!!ys.extensions;let $d=ut.y_p;ys.toneMapped&&(null!==md&&!0!==md.isXRRenderTarget||($d=ae.toneMapping));const Fp={shaderID:sd,shaderType:ys.type,shaderName:ys.name,vertexShader:cd,fragmentShader:ud,defines:ys.defines,customVertexShaderID:hd,customFragmentShaderID:dd,isRawShaderMaterial:!0===ys.isRawShaderMaterial,glslVersion:ys.glslVersion,precision:qu,batching:Ad,batchingColor:Ad&&null!==ed._colorsTexture,instancing:fd,instancingColor:fd&&null!==ed.instanceColor,instancingMorph:fd&&null!==ed.morphTexture,supportsVertexTextures:Hu,outputColorSpace:null===md?ae.outputColorSpace:!0===md.isXRRenderTarget?md.texture.colorSpace:ut.Zr2,alphaToCoverage:!!ys.alphaToCoverage,map:yd,matcap:_d,envMap:vd,envMapMode:vd&&rd.mapping,envMapCubeUVHeight:ad,aoMap:xd,lightMap:bd,bumpMap:wd,normalMap:Ed,displacementMap:Hu&&Md,emissiveMap:Sd,normalMapObjectSpace:Ed&&ys.normalMapType===ut.vyJ,normalMapTangentSpace:Ed&&ys.normalMapType===ut.bI3,metalnessMap:Td,roughnessMap:kd,anisotropy:Cd,anisotropyMap:Nd,clearcoat:Id,clearcoatMap:Rd,clearcoatNormalMap:Od,clearcoatRoughnessMap:Bd,dispersion:Dd,iridescence:Ld,iridescenceMap:Fd,iridescenceThicknessMap:jd,sheen:Pd,sheenColorMap:Ud,sheenRoughnessMap:Vd,specularMap:Gd,specularColorMap:Hd,specularIntensityMap:Wd,transmission:zd,transmissionMap:qd,thicknessMap:Zd,gradientMap:Yd,opaque:!1===ys.transparent&&ys.blending===ut.NTi&&!1===ys.alphaToCoverage,alphaMap:Qd,alphaTest:Kd,alphaHash:Xd,combine:ys.combine,mapUv:yd&&getChannel(ys.map.channel),aoMapUv:xd&&getChannel(ys.aoMap.channel),lightMapUv:bd&&getChannel(ys.lightMap.channel),bumpMapUv:wd&&getChannel(ys.bumpMap.channel),normalMapUv:Ed&&getChannel(ys.normalMap.channel),displacementMapUv:Md&&getChannel(ys.displacementMap.channel),emissiveMapUv:Sd&&getChannel(ys.emissiveMap.channel),metalnessMapUv:Td&&getChannel(ys.metalnessMap.channel),roughnessMapUv:kd&&getChannel(ys.roughnessMap.channel),anisotropyMapUv:Nd&&getChannel(ys.anisotropyMap.channel),clearcoatMapUv:Rd&&getChannel(ys.clearcoatMap.channel),clearcoatNormalMapUv:Od&&getChannel(ys.clearcoatNormalMap.channel),clearcoatRoughnessMapUv:Bd&&getChannel(ys.clearcoatRoughnessMap.channel),iridescenceMapUv:Fd&&getChannel(ys.iridescenceMap.channel),iridescenceThicknessMapUv:jd&&getChannel(ys.iridescenceThicknessMap.channel),sheenColorMapUv:Ud&&getChannel(ys.sheenColorMap.channel),sheenRoughnessMapUv:Vd&&getChannel(ys.sheenRoughnessMap.channel),specularMapUv:Gd&&getChannel(ys.specularMap.channel),specularColorMapUv:Hd&&getChannel(ys.specularColorMap.channel),specularIntensityMapUv:Wd&&getChannel(ys.specularIntensityMap.channel),transmissionMapUv:qd&&getChannel(ys.transmissionMap.channel),thicknessMapUv:Zd&&getChannel(ys.thicknessMap.channel),alphaMapUv:Qd&&getChannel(ys.alphaMap.channel),vertexTangents:!!id.attributes.tangent&&(Ed||Cd),vertexColors:ys.vertexColors,vertexAlphas:!0===ys.vertexColors&&!!id.attributes.color&&4===id.attributes.color.itemSize,pointsUvs:!0===ed.isPoints&&!!id.attributes.uv&&(yd||Qd),fog:!!td,useFog:!0===ys.fog,fogExp2:!!td&&td.isFogExp2,flatShading:!0===ys.flatShading&&!1===ys.wireframe,sizeAttenuation:!0===ys.sizeAttenuation,logarithmicDepthBuffer:wu,reversedDepthBuffer:gd,skinning:!0===ed.isSkinnedMesh,morphTargets:void 0!==id.morphAttributes.position,morphNormals:void 0!==id.morphAttributes.normal,morphColors:void 0!==id.morphAttributes.color,morphTargetsCount:ld,morphTextureStride:pd,numDirLights:lu.directional.length,numPointLights:lu.point.length,numSpotLights:lu.spot.length,numSpotLightMaps:lu.spotLightMap.length,numRectAreaLights:lu.rectArea.length,numHemiLights:lu.hemi.length,numDirLightShadows:lu.directionalShadowMap.length,numPointLightShadows:lu.pointShadowMap.length,numSpotLightShadows:lu.spotShadowMap.length,numSpotLightShadowsWithMaps:lu.numSpotLightShadowsWithMaps,numLightProbes:lu.numLightProbes,numClippingPlanes:Ec.numPlanes,numClipIntersection:Ec.numIntersection,dithering:ys.dithering,shadowMapEnabled:ae.shadowMap.enabled&&vu.length>0,shadowMapType:ae.shadowMap.type,toneMapping:$d,decodeVideoTexture:yd&&!0===ys.map.isVideoTexture&&ut.ppV.getTransfer(ys.map.colorSpace)===ut.KLL,decodeVideoTextureEmissive:Sd&&!0===ys.emissiveMap.isVideoTexture&&ut.ppV.getTransfer(ys.emissiveMap.colorSpace)===ut.KLL,premultipliedAlpha:ys.premultipliedAlpha,doubleSided:ys.side===ut.$EB,flipSided:ys.side===ut.hsX,useDepthPacking:ys.depthPacking>=0,depthPacking:ys.depthPacking||0,index0AttributeName:ys.index0AttributeName,extensionClipCullDistance:Jd&&!0===ys.extensions.clipCullDistance&&qt.has("WEBGL_clip_cull_distance"),extensionMultiDraw:(Jd&&!0===ys.extensions.multiDraw||Ad)&&qt.has("WEBGL_multi_draw"),rendererExtensionParallelShaderCompile:qt.has("KHR_parallel_shader_compile"),customProgramCacheKey:ys.customProgramCacheKey()};return Fp.vertexUv1s=_u.has(1),Fp.vertexUv2s=_u.has(2),Fp.vertexUv3s=_u.has(3),_u.clear(),Fp},getProgramCacheKey:function(ue){const nt=[];if(ue.shaderID?nt.push(ue.shaderID):(nt.push(ue.customVertexShaderID),nt.push(ue.customFragmentShaderID)),void 0!==ue.defines)for(const ae in ue.defines)nt.push(ae),nt.push(ue.defines[ae]);return!1===ue.isRawShaderMaterial&&(!function(ae,ue){ae.push(ue.precision),ae.push(ue.outputColorSpace),ae.push(ue.envMapMode),ae.push(ue.envMapCubeUVHeight),ae.push(ue.mapUv),ae.push(ue.alphaMapUv),ae.push(ue.lightMapUv),ae.push(ue.aoMapUv),ae.push(ue.bumpMapUv),ae.push(ue.normalMapUv),ae.push(ue.displacementMapUv),ae.push(ue.emissiveMapUv),ae.push(ue.metalnessMapUv),ae.push(ue.roughnessMapUv),ae.push(ue.anisotropyMapUv),ae.push(ue.clearcoatMapUv),ae.push(ue.clearcoatNormalMapUv),ae.push(ue.clearcoatRoughnessMapUv),ae.push(ue.iridescenceMapUv),ae.push(ue.iridescenceThicknessMapUv),ae.push(ue.sheenColorMapUv),ae.push(ue.sheenRoughnessMapUv),ae.push(ue.specularMapUv),ae.push(ue.specularColorMapUv),ae.push(ue.specularIntensityMapUv),ae.push(ue.transmissionMapUv),ae.push(ue.thicknessMapUv),ae.push(ue.combine),ae.push(ue.fogExp2),ae.push(ue.sizeAttenuation),ae.push(ue.morphTargetsCount),ae.push(ue.morphAttributeCount),ae.push(ue.numDirLights),ae.push(ue.numPointLights),ae.push(ue.numSpotLights),ae.push(ue.numSpotLightMaps),ae.push(ue.numHemiLights),ae.push(ue.numRectAreaLights),ae.push(ue.numDirLightShadows),ae.push(ue.numPointLightShadows),ae.push(ue.numSpotLightShadows),ae.push(ue.numSpotLightShadowsWithMaps),ae.push(ue.numLightProbes),ae.push(ue.shadowMapType),ae.push(ue.toneMapping),ae.push(ue.numClippingPlanes),ae.push(ue.numClipIntersection),ae.push(ue.depthPacking)}(nt,ue),function(ae,ue){lu.disableAll(),ue.supportsVertexTextures&&lu.enable(0);ue.instancing&&lu.enable(1);ue.instancingColor&&lu.enable(2);ue.instancingMorph&&lu.enable(3);ue.matcap&&lu.enable(4);ue.envMap&&lu.enable(5);ue.normalMapObjectSpace&&lu.enable(6);ue.normalMapTangentSpace&&lu.enable(7);ue.clearcoat&&lu.enable(8);ue.iridescence&&lu.enable(9);ue.alphaTest&&lu.enable(10);ue.vertexColors&&lu.enable(11);ue.vertexAlphas&&lu.enable(12);ue.vertexUv1s&&lu.enable(13);ue.vertexUv2s&&lu.enable(14);ue.vertexUv3s&&lu.enable(15);ue.vertexTangents&&lu.enable(16);ue.anisotropy&&lu.enable(17);ue.alphaHash&&lu.enable(18);ue.batching&&lu.enable(19);ue.dispersion&&lu.enable(20);ue.batchingColor&&lu.enable(21);ue.gradientMap&&lu.enable(22);ae.push(lu.mask),lu.disableAll(),ue.fog&&lu.enable(0);ue.useFog&&lu.enable(1);ue.flatShading&&lu.enable(2);ue.logarithmicDepthBuffer&&lu.enable(3);ue.reversedDepthBuffer&&lu.enable(4);ue.skinning&&lu.enable(5);ue.morphTargets&&lu.enable(6);ue.morphNormals&&lu.enable(7);ue.morphColors&&lu.enable(8);ue.premultipliedAlpha&&lu.enable(9);ue.shadowMapEnabled&&lu.enable(10);ue.doubleSided&&lu.enable(11);ue.flipSided&&lu.enable(12);ue.useDepthPacking&&lu.enable(13);ue.dithering&&lu.enable(14);ue.transmission&&lu.enable(15);ue.sheen&&lu.enable(16);ue.opaque&&lu.enable(17);ue.pointsUvs&&lu.enable(18);ue.decodeVideoTexture&&lu.enable(19);ue.decodeVideoTextureEmissive&&lu.enable(20);ue.alphaToCoverage&&lu.enable(21);ae.push(lu.mask)}(nt,ue),nt.push(ae.outputColorSpace)),nt.push(ue.customProgramCacheKey),nt.join()},getUniforms:function(ae){const ue=Ju[ae.type];let nt;if(ue){const ae=Xt[ue];nt=ut.LlO.clone(ae.uniforms)}else nt=ae.uniforms;return nt},acquireProgram:function(ue,nt){let ut;for(let ae=0,qt=vu.length;ae<qt;ae++){const ue=vu[ae];if(ue.cacheKey===nt){ut=ue,++ut.usedTimes;break}}return void 0===ut&&(ut=new WebGLProgram(ae,nt,ue,ys),vu.push(ut)),ut},releaseProgram:function(ae){if(0===--ae.usedTimes){const ue=vu.indexOf(ae);vu[ue]=vu[vu.length-1],vu.pop(),ae.destroy()}},releaseShaderCache:function(ae){uu.remove(ae)},programs:vu,dispose:function(){uu.dispose()}}}function WebGLProperties(){let ae=new WeakMap;return{has:function(ue){return ae.has(ue)},get:function(ue){let nt=ae.get(ue);return void 0===nt&&(nt={},ae.set(ue,nt)),nt},remove:function(ue){ae.delete(ue)},update:function(ue,nt,ut){ae.get(ue)[nt]=ut},dispose:function(){ae=new WeakMap}}}function painterSortStable(ae,ue){return ae.groupOrder!==ue.groupOrder?ae.groupOrder-ue.groupOrder:ae.renderOrder!==ue.renderOrder?ae.renderOrder-ue.renderOrder:ae.material.id!==ue.material.id?ae.material.id-ue.material.id:ae.z!==ue.z?ae.z-ue.z:ae.id-ue.id}function reversePainterSortStable(ae,ue){return ae.groupOrder!==ue.groupOrder?ae.groupOrder-ue.groupOrder:ae.renderOrder!==ue.renderOrder?ae.renderOrder-ue.renderOrder:ae.z!==ue.z?ue.z-ae.z:ae.id-ue.id}function WebGLRenderList(){const ae=[];let ue=0;const nt=[],ut=[],qt=[];function getNextRenderItem(nt,ut,qt,Yt,Xt,ys){let Ec=ae[ue];return void 0===Ec?(Ec={id:nt.id,object:nt,geometry:ut,material:qt,groupOrder:Yt,renderOrder:nt.renderOrder,z:Xt,group:ys},ae[ue]=Ec):(Ec.id=nt.id,Ec.object=nt,Ec.geometry=ut,Ec.material=qt,Ec.groupOrder=Yt,Ec.renderOrder=nt.renderOrder,Ec.z=Xt,Ec.group=ys),ue++,Ec}return{opaque:nt,transmissive:ut,transparent:qt,init:function(){ue=0,nt.length=0,ut.length=0,qt.length=0},push:function(ae,ue,Yt,Xt,ys,Ec){const lu=getNextRenderItem(ae,ue,Yt,Xt,ys,Ec);Yt.transmission>0?ut.push(lu):!0===Yt.transparent?qt.push(lu):nt.push(lu)},unshift:function(ae,ue,Yt,Xt,ys,Ec){const lu=getNextRenderItem(ae,ue,Yt,Xt,ys,Ec);Yt.transmission>0?ut.unshift(lu):!0===Yt.transparent?qt.unshift(lu):nt.unshift(lu)},finish:function(){for(let nt=ue,ut=ae.length;nt<ut;nt++){const ue=ae[nt];if(null===ue.id)break;ue.id=null,ue.object=null,ue.geometry=null,ue.material=null,ue.group=null}},sort:function(ae,ue){nt.length>1&&nt.sort(ae||painterSortStable),ut.length>1&&ut.sort(ue||reversePainterSortStable),qt.length>1&&qt.sort(ue||reversePainterSortStable)}}}function WebGLRenderLists(){let ae=new WeakMap;return{get:function(ue,nt){const ut=ae.get(ue);let qt;return void 0===ut?(qt=new WebGLRenderList,ae.set(ue,[qt])):nt>=ut.length?(qt=new WebGLRenderList,ut.push(qt)):qt=ut[nt],qt},dispose:function(){ae=new WeakMap}}}function UniformsCache(){const ae={};return{get:function(ue){if(void 0!==ae[ue.id])return ae[ue.id];let nt;switch(ue.type){case"DirectionalLight":nt={direction:new ut.Pq0,color:new ut.Q1f};break;case"SpotLight":nt={position:new ut.Pq0,direction:new ut.Pq0,color:new ut.Q1f,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":nt={position:new ut.Pq0,color:new ut.Q1f,distance:0,decay:0};break;case"HemisphereLight":nt={direction:new ut.Pq0,skyColor:new ut.Q1f,groundColor:new ut.Q1f};break;case"RectAreaLight":nt={color:new ut.Q1f,position:new ut.Pq0,halfWidth:new ut.Pq0,halfHeight:new ut.Pq0}}return ae[ue.id]=nt,nt}}}let bd=0;function shadowCastingAndTexturingLightsFirst(ae,ue){return(ue.castShadow?2:0)-(ae.castShadow?2:0)+(ue.map?1:0)-(ae.map?1:0)}function WebGLLights(ae){const ue=new UniformsCache,nt=function(){const ae={};return{get:function(ue){if(void 0!==ae[ue.id])return ae[ue.id];let nt;switch(ue.type){case"DirectionalLight":case"SpotLight":nt={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new ut.I9Y};break;case"PointLight":nt={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new ut.I9Y,shadowCameraNear:1,shadowCameraFar:1e3}}return ae[ue.id]=nt,nt}}}(),qt={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1,numSpotMaps:-1,numLightProbes:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotLightMap:[],spotShadow:[],spotShadowMap:[],spotLightMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],numSpotLightShadowsWithMaps:0,numLightProbes:0};for(let Yt=0;Yt<9;Yt++)qt.probe.push(new ut.Pq0);const Xt=new ut.Pq0,ys=new ut.kn4,Ec=new ut.kn4;return{setup:function(ut){let Xt=0,ys=0,Ec=0;for(let ae=0;ae<9;ae++)qt.probe[ae].set(0,0,0);let lu=0,uu=0,_u=0,vu=0,wu=0,Hu=0,qu=0,Ju=0,_h=0,ed=0,td=0;ut.sort(shadowCastingAndTexturingLightsFirst);for(let ae=0,Yt=ut.length;ae<Yt;ae++){const Yt=ut[ae],id=Yt.color,nd=Yt.intensity,rd=Yt.distance,ad=Yt.shadow&&Yt.shadow.map?Yt.shadow.map.texture:null;if(Yt.isAmbientLight)Xt+=id.r*nd,ys+=id.g*nd,Ec+=id.b*nd;else if(Yt.isLightProbe){for(let ae=0;ae<9;ae++)qt.probe[ae].addScaledVector(Yt.sh.coefficients[ae],nd);td++}else if(Yt.isDirectionalLight){const ae=ue.get(Yt);if(ae.color.copy(Yt.color).multiplyScalar(Yt.intensity),Yt.castShadow){const ae=Yt.shadow,ue=nt.get(Yt);ue.shadowIntensity=ae.intensity,ue.shadowBias=ae.bias,ue.shadowNormalBias=ae.normalBias,ue.shadowRadius=ae.radius,ue.shadowMapSize=ae.mapSize,qt.directionalShadow[lu]=ue,qt.directionalShadowMap[lu]=ad,qt.directionalShadowMatrix[lu]=Yt.shadow.matrix,Hu++}qt.directional[lu]=ae,lu++}else if(Yt.isSpotLight){const ae=ue.get(Yt);ae.position.setFromMatrixPosition(Yt.matrixWorld),ae.color.copy(id).multiplyScalar(nd),ae.distance=rd,ae.coneCos=Math.cos(Yt.angle),ae.penumbraCos=Math.cos(Yt.angle*(1-Yt.penumbra)),ae.decay=Yt.decay,qt.spot[_u]=ae;const ut=Yt.shadow;if(Yt.map&&(qt.spotLightMap[_h]=Yt.map,_h++,ut.updateMatrices(Yt),Yt.castShadow&&ed++),qt.spotLightMatrix[_u]=ut.matrix,Yt.castShadow){const ae=nt.get(Yt);ae.shadowIntensity=ut.intensity,ae.shadowBias=ut.bias,ae.shadowNormalBias=ut.normalBias,ae.shadowRadius=ut.radius,ae.shadowMapSize=ut.mapSize,qt.spotShadow[_u]=ae,qt.spotShadowMap[_u]=ad,Ju++}_u++}else if(Yt.isRectAreaLight){const ae=ue.get(Yt);ae.color.copy(id).multiplyScalar(nd),ae.halfWidth.set(.5*Yt.width,0,0),ae.halfHeight.set(0,.5*Yt.height,0),qt.rectArea[vu]=ae,vu++}else if(Yt.isPointLight){const ae=ue.get(Yt);if(ae.color.copy(Yt.color).multiplyScalar(Yt.intensity),ae.distance=Yt.distance,ae.decay=Yt.decay,Yt.castShadow){const ae=Yt.shadow,ue=nt.get(Yt);ue.shadowIntensity=ae.intensity,ue.shadowBias=ae.bias,ue.shadowNormalBias=ae.normalBias,ue.shadowRadius=ae.radius,ue.shadowMapSize=ae.mapSize,ue.shadowCameraNear=ae.camera.near,ue.shadowCameraFar=ae.camera.far,qt.pointShadow[uu]=ue,qt.pointShadowMap[uu]=ad,qt.pointShadowMatrix[uu]=Yt.shadow.matrix,qu++}qt.point[uu]=ae,uu++}else if(Yt.isHemisphereLight){const ae=ue.get(Yt);ae.skyColor.copy(Yt.color).multiplyScalar(nd),ae.groundColor.copy(Yt.groundColor).multiplyScalar(nd),qt.hemi[wu]=ae,wu++}}vu>0&&(!0===ae.has("OES_texture_float_linear")?(qt.rectAreaLTC1=Yt.LTC_FLOAT_1,qt.rectAreaLTC2=Yt.LTC_FLOAT_2):(qt.rectAreaLTC1=Yt.LTC_HALF_1,qt.rectAreaLTC2=Yt.LTC_HALF_2)),qt.ambient[0]=Xt,qt.ambient[1]=ys,qt.ambient[2]=Ec;const id=qt.hash;id.directionalLength===lu&&id.pointLength===uu&&id.spotLength===_u&&id.rectAreaLength===vu&&id.hemiLength===wu&&id.numDirectionalShadows===Hu&&id.numPointShadows===qu&&id.numSpotShadows===Ju&&id.numSpotMaps===_h&&id.numLightProbes===td||(qt.directional.length=lu,qt.spot.length=_u,qt.rectArea.length=vu,qt.point.length=uu,qt.hemi.length=wu,qt.directionalShadow.length=Hu,qt.directionalShadowMap.length=Hu,qt.pointShadow.length=qu,qt.pointShadowMap.length=qu,qt.spotShadow.length=Ju,qt.spotShadowMap.length=Ju,qt.directionalShadowMatrix.length=Hu,qt.pointShadowMatrix.length=qu,qt.spotLightMatrix.length=Ju+_h-ed,qt.spotLightMap.length=_h,qt.numSpotLightShadowsWithMaps=ed,qt.numLightProbes=td,id.directionalLength=lu,id.pointLength=uu,id.spotLength=_u,id.rectAreaLength=vu,id.hemiLength=wu,id.numDirectionalShadows=Hu,id.numPointShadows=qu,id.numSpotShadows=Ju,id.numSpotMaps=_h,id.numLightProbes=td,qt.version=bd++)},setupView:function(ae,ue){let nt=0,ut=0,Yt=0,lu=0,uu=0;const _u=ue.matrixWorldInverse;for(let vu=0,wu=ae.length;vu<wu;vu++){const ue=ae[vu];if(ue.isDirectionalLight){const ae=qt.directional[nt];ae.direction.setFromMatrixPosition(ue.matrixWorld),Xt.setFromMatrixPosition(ue.target.matrixWorld),ae.direction.sub(Xt),ae.direction.transformDirection(_u),nt++}else if(ue.isSpotLight){const ae=qt.spot[Yt];ae.position.setFromMatrixPosition(ue.matrixWorld),ae.position.applyMatrix4(_u),ae.direction.setFromMatrixPosition(ue.matrixWorld),Xt.setFromMatrixPosition(ue.target.matrixWorld),ae.direction.sub(Xt),ae.direction.transformDirection(_u),Yt++}else if(ue.isRectAreaLight){const ae=qt.rectArea[lu];ae.position.setFromMatrixPosition(ue.matrixWorld),ae.position.applyMatrix4(_u),Ec.identity(),ys.copy(ue.matrixWorld),ys.premultiply(_u),Ec.extractRotation(ys),ae.halfWidth.set(.5*ue.width,0,0),ae.halfHeight.set(0,.5*ue.height,0),ae.halfWidth.applyMatrix4(Ec),ae.halfHeight.applyMatrix4(Ec),lu++}else if(ue.isPointLight){const ae=qt.point[ut];ae.position.setFromMatrixPosition(ue.matrixWorld),ae.position.applyMatrix4(_u),ut++}else if(ue.isHemisphereLight){const ae=qt.hemi[uu];ae.direction.setFromMatrixPosition(ue.matrixWorld),ae.direction.transformDirection(_u),uu++}}},state:qt}}function WebGLRenderState(ae){const ue=new WebGLLights(ae),nt=[],ut=[];const qt={lightsArray:nt,shadowsArray:ut,camera:null,lights:ue,transmissionRenderTarget:{}};return{init:function(ae){qt.camera=ae,nt.length=0,ut.length=0},state:qt,setupLights:function(){ue.setup(nt)},setupLightsView:function(ae){ue.setupView(nt,ae)},pushLight:function(ae){nt.push(ae)},pushShadow:function(ae){ut.push(ae)}}}function WebGLRenderStates(ae){let ue=new WeakMap;return{get:function(nt,ut){void 0===ut&&(ut=0);const qt=ue.get(nt);let Yt;return void 0===qt?(Yt=new WebGLRenderState(ae),ue.set(nt,[Yt])):ut>=qt.length?(Yt=new WebGLRenderState(ae),qt.push(Yt)):Yt=qt[ut],Yt},dispose:function(){ue=new WeakMap}}}function WebGLShadowMap(ae,ue,nt){let qt=new ut.PPD;const Yt=new ut.I9Y,Xt=new ut.I9Y,ys=new ut.IUQ,Ec=new ut.CSG({depthPacking:ut.N5j}),lu=new ut.aVO,uu={},_u=nt.maxTextureSize,vu={[ut.hB5]:ut.hsX,[ut.hsX]:ut.hB5,[ut.$EB]:ut.$EB},wu=new ut.BKk({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new ut.I9Y},radius:{value:4}},vertexShader:"void main() {\n\tgl_Position = vec4( position, 1.0 );\n}",fragmentShader:"uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include <packing>\nvoid main() {\n\tconst float samples = float( VSM_SAMPLES );\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\n\tfloat uvStart = samples <= 1.0 ? 0.0 : - 1.0;\n\tfor ( float i = 0.0; i < samples; i ++ ) {\n\t\tfloat uvOffset = uvStart + i * uvStride;\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean / samples;\n\tsquared_mean = squared_mean / samples;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"}),Hu=wu.clone();Hu.defines.HORIZONTAL_PASS=1;const qu=new ut.LoY;qu.setAttribute("position",new ut.THS(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const Ju=new ut.eaF(qu,wu),_h=this;this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=ut.QP0;let ed=this.type;function VSMPass(nt,qt){const Xt=ue.update(Ju);wu.defines.VSM_SAMPLES!==nt.blurSamples&&(wu.defines.VSM_SAMPLES=nt.blurSamples,Hu.defines.VSM_SAMPLES=nt.blurSamples,wu.needsUpdate=!0,Hu.needsUpdate=!0),null===nt.mapPass&&(nt.mapPass=new ut.nWS(Yt.x,Yt.y)),wu.uniforms.shadow_pass.value=nt.map.texture,wu.uniforms.resolution.value=nt.mapSize,wu.uniforms.radius.value=nt.radius,ae.setRenderTarget(nt.mapPass),ae.clear(),ae.renderBufferDirect(qt,null,Xt,wu,Ju,null),Hu.uniforms.shadow_pass.value=nt.mapPass.texture,Hu.uniforms.resolution.value=nt.mapSize,Hu.uniforms.radius.value=nt.radius,ae.setRenderTarget(nt.map),ae.clear(),ae.renderBufferDirect(qt,null,Xt,Hu,Ju,null)}function getDepthMaterial(ue,nt,qt,Yt){let Xt=null;const ys=!0===qt.isPointLight?ue.customDistanceMaterial:ue.customDepthMaterial;if(void 0!==ys)Xt=ys;else if(Xt=!0===qt.isPointLight?lu:Ec,ae.localClippingEnabled&&!0===nt.clipShadows&&Array.isArray(nt.clippingPlanes)&&0!==nt.clippingPlanes.length||nt.displacementMap&&0!==nt.displacementScale||nt.alphaMap&&nt.alphaTest>0||nt.map&&nt.alphaTest>0||!0===nt.alphaToCoverage){const ae=Xt.uuid,ue=nt.uuid;let ut=uu[ae];void 0===ut&&(ut={},uu[ae]=ut);let qt=ut[ue];void 0===qt&&(qt=Xt.clone(),ut[ue]=qt,nt.addEventListener("dispose",onMaterialDispose)),Xt=qt}if(Xt.visible=nt.visible,Xt.wireframe=nt.wireframe,Yt===ut.RyA?Xt.side=null!==nt.shadowSide?nt.shadowSide:nt.side:Xt.side=null!==nt.shadowSide?nt.shadowSide:vu[nt.side],Xt.alphaMap=nt.alphaMap,Xt.alphaTest=!0===nt.alphaToCoverage?.5:nt.alphaTest,Xt.map=nt.map,Xt.clipShadows=nt.clipShadows,Xt.clippingPlanes=nt.clippingPlanes,Xt.clipIntersection=nt.clipIntersection,Xt.displacementMap=nt.displacementMap,Xt.displacementScale=nt.displacementScale,Xt.displacementBias=nt.displacementBias,Xt.wireframeLinewidth=nt.wireframeLinewidth,Xt.linewidth=nt.linewidth,!0===qt.isPointLight&&!0===Xt.isMeshDistanceMaterial){ae.properties.get(Xt).light=qt}return Xt}function renderObject(nt,Yt,Xt,ys,Ec){if(!1===nt.visible)return;if(nt.layers.test(Yt.layers)&&(nt.isMesh||nt.isLine||nt.isPoints)&&(nt.castShadow||nt.receiveShadow&&Ec===ut.RyA)&&(!nt.frustumCulled||qt.intersectsObject(nt))){nt.modelViewMatrix.multiplyMatrices(Xt.matrixWorldInverse,nt.matrixWorld);const ut=ue.update(nt),qt=nt.material;if(Array.isArray(qt)){const ue=ut.groups;for(let lu=0,uu=ue.length;lu<uu;lu++){const uu=ue[lu],_u=qt[uu.materialIndex];if(_u&&_u.visible){const ue=getDepthMaterial(nt,_u,ys,Ec);nt.onBeforeShadow(ae,nt,Yt,Xt,ut,ue,uu),ae.renderBufferDirect(Xt,null,ut,ue,nt,uu),nt.onAfterShadow(ae,nt,Yt,Xt,ut,ue,uu)}}}else if(qt.visible){const ue=getDepthMaterial(nt,qt,ys,Ec);nt.onBeforeShadow(ae,nt,Yt,Xt,ut,ue,null),ae.renderBufferDirect(Xt,null,ut,ue,nt,null),nt.onAfterShadow(ae,nt,Yt,Xt,ut,ue,null)}}const lu=nt.children;for(let ae=0,ue=lu.length;ae<ue;ae++)renderObject(lu[ae],Yt,Xt,ys,Ec)}function onMaterialDispose(ae){ae.target.removeEventListener("dispose",onMaterialDispose);for(const ue in uu){const nt=uu[ue],ut=ae.target.uuid;if(ut in nt){nt[ut].dispose(),delete nt[ut]}}}this.render=function(ue,nt,Ec){if(!1===_h.enabled)return;if(!1===_h.autoUpdate&&!1===_h.needsUpdate)return;if(0===ue.length)return;const lu=ae.getRenderTarget(),uu=ae.getActiveCubeFace(),vu=ae.getActiveMipmapLevel(),wu=ae.state;wu.setBlending(ut.XIg),wu.buffers.depth.getReversed()?wu.buffers.color.setClear(0,0,0,0):wu.buffers.color.setClear(1,1,1,1),wu.buffers.depth.setTest(!0),wu.setScissorTest(!1);const Hu=ed!==ut.RyA&&this.type===ut.RyA,qu=ed===ut.RyA&&this.type!==ut.RyA;for(let Ju=0,_h=ue.length;Ju<_h;Ju++){const lu=ue[Ju],uu=lu.shadow;if(void 0===uu){console.warn("THREE.WebGLShadowMap:",lu,"has no shadow.");continue}if(!1===uu.autoUpdate&&!1===uu.needsUpdate)continue;Yt.copy(uu.mapSize);const vu=uu.getFrameExtents();if(Yt.multiply(vu),Xt.copy(uu.mapSize),(Yt.x>_u||Yt.y>_u)&&(Yt.x>_u&&(Xt.x=Math.floor(_u/vu.x),Yt.x=Xt.x*vu.x,uu.mapSize.x=Xt.x),Yt.y>_u&&(Xt.y=Math.floor(_u/vu.y),Yt.y=Xt.y*vu.y,uu.mapSize.y=Xt.y)),null===uu.map||!0===Hu||!0===qu){const ae=this.type!==ut.RyA?{minFilter:ut.hxR,magFilter:ut.hxR}:{};null!==uu.map&&uu.map.dispose(),uu.map=new ut.nWS(Yt.x,Yt.y,ae),uu.map.texture.name=lu.name+".shadowMap",uu.camera.updateProjectionMatrix()}ae.setRenderTarget(uu.map),ae.clear();const _h=uu.getViewportCount();for(let ae=0;ae<_h;ae++){const ue=uu.getViewport(ae);ys.set(Xt.x*ue.x,Xt.y*ue.y,Xt.x*ue.z,Xt.y*ue.w),wu.viewport(ys),uu.updateMatrices(lu,ae),qt=uu.getFrustum(),renderObject(nt,Ec,uu.camera,lu,this.type)}!0!==uu.isPointLightShadow&&this.type===ut.RyA&&VSMPass(uu,Ec),uu.needsUpdate=!1}ed=this.type,_h.needsUpdate=!1,ae.setRenderTarget(lu,uu,vu)}}const wd={[ut.eHc]:ut.lGu,[ut.brA]:ut.K52,[ut.U3G]:ut.bw0,[ut.xSv]:ut.Gwm,[ut.lGu]:ut.eHc,[ut.K52]:ut.brA,[ut.bw0]:ut.U3G,[ut.Gwm]:ut.xSv};function WebGLState(ae,ue){const nt=new function(){let ue=!1;const nt=new ut.IUQ;let qt=null;const Yt=new ut.IUQ(0,0,0,0);return{setMask:function(nt){qt===nt||ue||(ae.colorMask(nt,nt,nt,nt),qt=nt)},setLocked:function(ae){ue=ae},setClear:function(ue,ut,qt,Xt,ys){!0===ys&&(ue*=Xt,ut*=Xt,qt*=Xt),nt.set(ue,ut,qt,Xt),!1===Yt.equals(nt)&&(ae.clearColor(ue,ut,qt,Xt),Yt.copy(nt))},reset:function(){ue=!1,qt=null,Yt.set(-1,0,0,0)}}},qt=new function(){let nt=!1,qt=!1,Yt=null,Xt=null,ys=null;return{setReversed:function(ae){if(qt!==ae){const nt=ue.get("EXT_clip_control");ae?nt.clipControlEXT(nt.LOWER_LEFT_EXT,nt.ZERO_TO_ONE_EXT):nt.clipControlEXT(nt.LOWER_LEFT_EXT,nt.NEGATIVE_ONE_TO_ONE_EXT),qt=ae;const ut=ys;ys=null,this.setClear(ut)}},getReversed:function(){return qt},setTest:function(ue){ue?enable(ae.DEPTH_TEST):disable(ae.DEPTH_TEST)},setMask:function(ue){Yt===ue||nt||(ae.depthMask(ue),Yt=ue)},setFunc:function(ue){if(qt&&(ue=wd[ue]),Xt!==ue){switch(ue){case ut.eHc:ae.depthFunc(ae.NEVER);break;case ut.lGu:ae.depthFunc(ae.ALWAYS);break;case ut.brA:ae.depthFunc(ae.LESS);break;case ut.xSv:ae.depthFunc(ae.LEQUAL);break;case ut.U3G:ae.depthFunc(ae.EQUAL);break;case ut.Gwm:ae.depthFunc(ae.GEQUAL);break;case ut.K52:ae.depthFunc(ae.GREATER);break;case ut.bw0:ae.depthFunc(ae.NOTEQUAL);break;default:ae.depthFunc(ae.LEQUAL)}Xt=ue}},setLocked:function(ae){nt=ae},setClear:function(ue){ys!==ue&&(qt&&(ue=1-ue),ae.clearDepth(ue),ys=ue)},reset:function(){nt=!1,Yt=null,Xt=null,ys=null,qt=!1}}},Yt=new function(){let ue=!1,nt=null,ut=null,qt=null,Yt=null,Xt=null,ys=null,Ec=null,lu=null;return{setTest:function(nt){ue||(nt?enable(ae.STENCIL_TEST):disable(ae.STENCIL_TEST))},setMask:function(ut){nt===ut||ue||(ae.stencilMask(ut),nt=ut)},setFunc:function(ue,nt,Xt){ut===ue&&qt===nt&&Yt===Xt||(ae.stencilFunc(ue,nt,Xt),ut=ue,qt=nt,Yt=Xt)},setOp:function(ue,nt,ut){Xt===ue&&ys===nt&&Ec===ut||(ae.stencilOp(ue,nt,ut),Xt=ue,ys=nt,Ec=ut)},setLocked:function(ae){ue=ae},setClear:function(ue){lu!==ue&&(ae.clearStencil(ue),lu=ue)},reset:function(){ue=!1,nt=null,ut=null,qt=null,Yt=null,Xt=null,ys=null,Ec=null,lu=null}}},Xt=new WeakMap,ys=new WeakMap;let Ec={},lu={},uu=new WeakMap,_u=[],vu=null,wu=!1,Hu=null,qu=null,Ju=null,_h=null,ed=null,td=null,id=null,nd=new ut.Q1f(0,0,0),rd=0,ad=!1,sd=null,od=null,ld=null,cd=null,ud=null;const hd=ae.getParameter(ae.MAX_COMBINED_TEXTURE_IMAGE_UNITS);let dd=!1,pd=0;const md=ae.getParameter(ae.VERSION);-1!==md.indexOf("WebGL")?(pd=parseFloat(/^WebGL (\d)/.exec(md)[1]),dd=pd>=1):-1!==md.indexOf("OpenGL ES")&&(pd=parseFloat(/^OpenGL ES (\d)/.exec(md)[1]),dd=pd>=2);let gd=null,fd={};const Ad=ae.getParameter(ae.SCISSOR_BOX),yd=ae.getParameter(ae.VIEWPORT),_d=(new ut.IUQ).fromArray(Ad),vd=(new ut.IUQ).fromArray(yd);function createTexture(ue,nt,ut,qt){const Yt=new Uint8Array(4),Xt=ae.createTexture();ae.bindTexture(ue,Xt),ae.texParameteri(ue,ae.TEXTURE_MIN_FILTER,ae.NEAREST),ae.texParameteri(ue,ae.TEXTURE_MAG_FILTER,ae.NEAREST);for(let ys=0;ys<ut;ys++)ue===ae.TEXTURE_3D||ue===ae.TEXTURE_2D_ARRAY?ae.texImage3D(nt,0,ae.RGBA,1,1,qt,0,ae.RGBA,ae.UNSIGNED_BYTE,Yt):ae.texImage2D(nt+ys,0,ae.RGBA,1,1,0,ae.RGBA,ae.UNSIGNED_BYTE,Yt);return Xt}const xd={};function enable(ue){!0!==Ec[ue]&&(ae.enable(ue),Ec[ue]=!0)}function disable(ue){!1!==Ec[ue]&&(ae.disable(ue),Ec[ue]=!1)}xd[ae.TEXTURE_2D]=createTexture(ae.TEXTURE_2D,ae.TEXTURE_2D,1),xd[ae.TEXTURE_CUBE_MAP]=createTexture(ae.TEXTURE_CUBE_MAP,ae.TEXTURE_CUBE_MAP_POSITIVE_X,6),xd[ae.TEXTURE_2D_ARRAY]=createTexture(ae.TEXTURE_2D_ARRAY,ae.TEXTURE_2D_ARRAY,1,1),xd[ae.TEXTURE_3D]=createTexture(ae.TEXTURE_3D,ae.TEXTURE_3D,1,1),nt.setClear(0,0,0,1),qt.setClear(1),Yt.setClear(0),enable(ae.DEPTH_TEST),qt.setFunc(ut.xSv),setFlipSided(!1),setCullFace(ut.Vb5),enable(ae.CULL_FACE),setBlending(ut.XIg);const bd={[ut.gO9]:ae.FUNC_ADD,[ut.FXf]:ae.FUNC_SUBTRACT,[ut.nST]:ae.FUNC_REVERSE_SUBTRACT};bd[ut.znC]=ae.MIN,bd[ut.$ei]=ae.MAX;const Ed={[ut.ojh]:ae.ZERO,[ut.qad]:ae.ONE,[ut.f4X]:ae.SRC_COLOR,[ut.ie2]:ae.SRC_ALPHA,[ut.hgQ]:ae.SRC_ALPHA_SATURATE,[ut.wn6]:ae.DST_COLOR,[ut.hdd]:ae.DST_ALPHA,[ut.LiQ]:ae.ONE_MINUS_SRC_COLOR,[ut.OuU]:ae.ONE_MINUS_SRC_ALPHA,[ut.aEY]:ae.ONE_MINUS_DST_COLOR,[ut.Nt7]:ae.ONE_MINUS_DST_ALPHA,[ut.RrE]:ae.CONSTANT_COLOR,[ut.$Yl]:ae.ONE_MINUS_CONSTANT_COLOR,[ut.e0p]:ae.CONSTANT_ALPHA,[ut.ov9]:ae.ONE_MINUS_CONSTANT_ALPHA};function setBlending(ue,nt,qt,Yt,Xt,ys,Ec,lu,uu,_u){if(ue!==ut.XIg){if(!1===wu&&(enable(ae.BLEND),wu=!0),ue===ut.bCz)Xt=Xt||nt,ys=ys||qt,Ec=Ec||Yt,nt===qu&&Xt===ed||(ae.blendEquationSeparate(bd[nt],bd[Xt]),qu=nt,ed=Xt),qt===Ju&&Yt===_h&&ys===td&&Ec===id||(ae.blendFuncSeparate(Ed[qt],Ed[Yt],Ed[ys],Ed[Ec]),Ju=qt,_h=Yt,td=ys,id=Ec),!1!==lu.equals(nd)&&uu===rd||(ae.blendColor(lu.r,lu.g,lu.b,uu),nd.copy(lu),rd=uu),Hu=ue,ad=!1;else if(ue!==Hu||_u!==ad){if(qu===ut.gO9&&ed===ut.gO9||(ae.blendEquation(ae.FUNC_ADD),qu=ut.gO9,ed=ut.gO9),_u)switch(ue){case ut.NTi:ae.blendFuncSeparate(ae.ONE,ae.ONE_MINUS_SRC_ALPHA,ae.ONE,ae.ONE_MINUS_SRC_ALPHA);break;case ut.EZo:ae.blendFunc(ae.ONE,ae.ONE);break;case ut.Kwu:ae.blendFuncSeparate(ae.ZERO,ae.ONE_MINUS_SRC_COLOR,ae.ZERO,ae.ONE);break;case ut.EdD:ae.blendFuncSeparate(ae.DST_COLOR,ae.ONE_MINUS_SRC_ALPHA,ae.ZERO,ae.ONE);break;default:console.error("THREE.WebGLState: Invalid blending: ",ue)}else switch(ue){case ut.NTi:ae.blendFuncSeparate(ae.SRC_ALPHA,ae.ONE_MINUS_SRC_ALPHA,ae.ONE,ae.ONE_MINUS_SRC_ALPHA);break;case ut.EZo:ae.blendFuncSeparate(ae.SRC_ALPHA,ae.ONE,ae.ONE,ae.ONE);break;case ut.Kwu:console.error("THREE.WebGLState: SubtractiveBlending requires material.premultipliedAlpha = true");break;case ut.EdD:console.error("THREE.WebGLState: MultiplyBlending requires material.premultipliedAlpha = true");break;default:console.error("THREE.WebGLState: Invalid blending: ",ue)}Ju=null,_h=null,td=null,id=null,nd.set(0,0,0),rd=0,Hu=ue,ad=_u}}else!0===wu&&(disable(ae.BLEND),wu=!1)}function setFlipSided(ue){sd!==ue&&(ue?ae.frontFace(ae.CW):ae.frontFace(ae.CCW),sd=ue)}function setCullFace(ue){ue!==ut.WNZ?(enable(ae.CULL_FACE),ue!==od&&(ue===ut.Vb5?ae.cullFace(ae.BACK):ue===ut.Jnc?ae.cullFace(ae.FRONT):ae.cullFace(ae.FRONT_AND_BACK))):disable(ae.CULL_FACE),od=ue}function setPolygonOffset(ue,nt,ut){ue?(enable(ae.POLYGON_OFFSET_FILL),cd===nt&&ud===ut||(ae.polygonOffset(nt,ut),cd=nt,ud=ut)):disable(ae.POLYGON_OFFSET_FILL)}return{buffers:{color:nt,depth:qt,stencil:Yt},enable:enable,disable:disable,bindFramebuffer:function(ue,nt){return lu[ue]!==nt&&(ae.bindFramebuffer(ue,nt),lu[ue]=nt,ue===ae.DRAW_FRAMEBUFFER&&(lu[ae.FRAMEBUFFER]=nt),ue===ae.FRAMEBUFFER&&(lu[ae.DRAW_FRAMEBUFFER]=nt),!0)},drawBuffers:function(ue,nt){let ut=_u,qt=!1;if(ue){ut=uu.get(nt),void 0===ut&&(ut=[],uu.set(nt,ut));const Yt=ue.textures;if(ut.length!==Yt.length||ut[0]!==ae.COLOR_ATTACHMENT0){for(let ue=0,nt=Yt.length;ue<nt;ue++)ut[ue]=ae.COLOR_ATTACHMENT0+ue;ut.length=Yt.length,qt=!0}}else ut[0]!==ae.BACK&&(ut[0]=ae.BACK,qt=!0);qt&&ae.drawBuffers(ut)},useProgram:function(ue){return vu!==ue&&(ae.useProgram(ue),vu=ue,!0)},setBlending:setBlending,setMaterial:function(ue,Xt){ue.side===ut.$EB?disable(ae.CULL_FACE):enable(ae.CULL_FACE);let ys=ue.side===ut.hsX;Xt&&(ys=!ys),setFlipSided(ys),ue.blending===ut.NTi&&!1===ue.transparent?setBlending(ut.XIg):setBlending(ue.blending,ue.blendEquation,ue.blendSrc,ue.blendDst,ue.blendEquationAlpha,ue.blendSrcAlpha,ue.blendDstAlpha,ue.blendColor,ue.blendAlpha,ue.premultipliedAlpha),qt.setFunc(ue.depthFunc),qt.setTest(ue.depthTest),qt.setMask(ue.depthWrite),nt.setMask(ue.colorWrite);const Ec=ue.stencilWrite;Yt.setTest(Ec),Ec&&(Yt.setMask(ue.stencilWriteMask),Yt.setFunc(ue.stencilFunc,ue.stencilRef,ue.stencilFuncMask),Yt.setOp(ue.stencilFail,ue.stencilZFail,ue.stencilZPass)),setPolygonOffset(ue.polygonOffset,ue.polygonOffsetFactor,ue.polygonOffsetUnits),!0===ue.alphaToCoverage?enable(ae.SAMPLE_ALPHA_TO_COVERAGE):disable(ae.SAMPLE_ALPHA_TO_COVERAGE)},setFlipSided:setFlipSided,setCullFace:setCullFace,setLineWidth:function(ue){ue!==ld&&(dd&&ae.lineWidth(ue),ld=ue)},setPolygonOffset:setPolygonOffset,setScissorTest:function(ue){ue?enable(ae.SCISSOR_TEST):disable(ae.SCISSOR_TEST)},activeTexture:function(ue){void 0===ue&&(ue=ae.TEXTURE0+hd-1),gd!==ue&&(ae.activeTexture(ue),gd=ue)},bindTexture:function(ue,nt,ut){void 0===ut&&(ut=null===gd?ae.TEXTURE0+hd-1:gd);let qt=fd[ut];void 0===qt&&(qt={type:void 0,texture:void 0},fd[ut]=qt),qt.type===ue&&qt.texture===nt||(gd!==ut&&(ae.activeTexture(ut),gd=ut),ae.bindTexture(ue,nt||xd[ue]),qt.type=ue,qt.texture=nt)},unbindTexture:function(){const ue=fd[gd];void 0!==ue&&void 0!==ue.type&&(ae.bindTexture(ue.type,null),ue.type=void 0,ue.texture=void 0)},compressedTexImage2D:function(){try{ae.compressedTexImage2D(...arguments)}catch(ue){console.error("THREE.WebGLState:",ue)}},compressedTexImage3D:function(){try{ae.compressedTexImage3D(...arguments)}catch(ue){console.error("THREE.WebGLState:",ue)}},texImage2D:function(){try{ae.texImage2D(...arguments)}catch(ue){console.error("THREE.WebGLState:",ue)}},texImage3D:function(){try{ae.texImage3D(...arguments)}catch(ue){console.error("THREE.WebGLState:",ue)}},updateUBOMapping:function(ue,nt){let ut=ys.get(nt);void 0===ut&&(ut=new WeakMap,ys.set(nt,ut));let qt=ut.get(ue);void 0===qt&&(qt=ae.getUniformBlockIndex(nt,ue.name),ut.set(ue,qt))},uniformBlockBinding:function(ue,nt){const ut=ys.get(nt).get(ue);Xt.get(nt)!==ut&&(ae.uniformBlockBinding(nt,ut,ue.__bindingPointIndex),Xt.set(nt,ut))},texStorage2D:function(){try{ae.texStorage2D(...arguments)}catch(ue){console.error("THREE.WebGLState:",ue)}},texStorage3D:function(){try{ae.texStorage3D(...arguments)}catch(ue){console.error("THREE.WebGLState:",ue)}},texSubImage2D:function(){try{ae.texSubImage2D(...arguments)}catch(ue){console.error("THREE.WebGLState:",ue)}},texSubImage3D:function(){try{ae.texSubImage3D(...arguments)}catch(ue){console.error("THREE.WebGLState:",ue)}},compressedTexSubImage2D:function(){try{ae.compressedTexSubImage2D(...arguments)}catch(ue){console.error("THREE.WebGLState:",ue)}},compressedTexSubImage3D:function(){try{ae.compressedTexSubImage3D(...arguments)}catch(ue){console.error("THREE.WebGLState:",ue)}},scissor:function(ue){!1===_d.equals(ue)&&(ae.scissor(ue.x,ue.y,ue.z,ue.w),_d.copy(ue))},viewport:function(ue){!1===vd.equals(ue)&&(ae.viewport(ue.x,ue.y,ue.z,ue.w),vd.copy(ue))},reset:function(){ae.disable(ae.BLEND),ae.disable(ae.CULL_FACE),ae.disable(ae.DEPTH_TEST),ae.disable(ae.POLYGON_OFFSET_FILL),ae.disable(ae.SCISSOR_TEST),ae.disable(ae.STENCIL_TEST),ae.disable(ae.SAMPLE_ALPHA_TO_COVERAGE),ae.blendEquation(ae.FUNC_ADD),ae.blendFunc(ae.ONE,ae.ZERO),ae.blendFuncSeparate(ae.ONE,ae.ZERO,ae.ONE,ae.ZERO),ae.blendColor(0,0,0,0),ae.colorMask(!0,!0,!0,!0),ae.clearColor(0,0,0,0),ae.depthMask(!0),ae.depthFunc(ae.LESS),qt.setReversed(!1),ae.clearDepth(1),ae.stencilMask(4294967295),ae.stencilFunc(ae.ALWAYS,0,4294967295),ae.stencilOp(ae.KEEP,ae.KEEP,ae.KEEP),ae.clearStencil(0),ae.cullFace(ae.BACK),ae.frontFace(ae.CCW),ae.polygonOffset(0,0),ae.activeTexture(ae.TEXTURE0),ae.bindFramebuffer(ae.FRAMEBUFFER,null),ae.bindFramebuffer(ae.DRAW_FRAMEBUFFER,null),ae.bindFramebuffer(ae.READ_FRAMEBUFFER,null),ae.useProgram(null),ae.lineWidth(1),ae.scissor(0,0,ae.canvas.width,ae.canvas.height),ae.viewport(0,0,ae.canvas.width,ae.canvas.height),Ec={},gd=null,fd={},lu={},uu=new WeakMap,_u=[],vu=null,wu=!1,Hu=null,qu=null,Ju=null,_h=null,ed=null,td=null,id=null,nd=new ut.Q1f(0,0,0),rd=0,ad=!1,sd=null,od=null,ld=null,cd=null,ud=null,_d.set(0,0,ae.canvas.width,ae.canvas.height),vd.set(0,0,ae.canvas.width,ae.canvas.height),nt.reset(),qt.reset(),Yt.reset()}}}function WebGLTextures(ae,ue,nt,qt,Yt,Xt,ys){const Ec=ue.has("WEBGL_multisampled_render_to_texture")?ue.get("WEBGL_multisampled_render_to_texture"):null,lu="undefined"!==typeof navigator&&/OculusBrowser/g.test(navigator.userAgent),uu=new ut.I9Y,_u=new WeakMap;let vu;const wu=new WeakMap;let Hu=!1;try{Hu="undefined"!==typeof OffscreenCanvas&&null!==new OffscreenCanvas(1,1).getContext("2d")}catch(nd){}function createCanvas(ae,ue){return Hu?new OffscreenCanvas(ae,ue):(0,ut.qq$)("canvas")}function resizeImage(ae,ue,nt){let ut=1;const qt=getDimensions(ae);if((qt.width>nt||qt.height>nt)&&(ut=nt/Math.max(qt.width,qt.height)),ut<1){if("undefined"!==typeof HTMLImageElement&&ae instanceof HTMLImageElement||"undefined"!==typeof HTMLCanvasElement&&ae instanceof HTMLCanvasElement||"undefined"!==typeof ImageBitmap&&ae instanceof ImageBitmap||"undefined"!==typeof VideoFrame&&ae instanceof VideoFrame){const nt=Math.floor(ut*qt.width),Yt=Math.floor(ut*qt.height);void 0===vu&&(vu=createCanvas(nt,Yt));const Xt=ue?createCanvas(nt,Yt):vu;Xt.width=nt,Xt.height=Yt;return Xt.getContext("2d").drawImage(ae,0,0,nt,Yt),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+qt.width+"x"+qt.height+") to ("+nt+"x"+Yt+")."),Xt}return"data"in ae&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+qt.width+"x"+qt.height+")."),ae}return ae}function textureNeedsGenerateMipmaps(ae){return ae.generateMipmaps}function generateMipmap(ue){ae.generateMipmap(ue)}function getTargetType(ue){return ue.isWebGLCubeRenderTarget?ae.TEXTURE_CUBE_MAP:ue.isWebGL3DRenderTarget?ae.TEXTURE_3D:ue.isWebGLArrayRenderTarget||ue.isCompressedArrayTexture?ae.TEXTURE_2D_ARRAY:ae.TEXTURE_2D}function getInternalFormat(nt,qt,Yt,Xt,ys){if(void 0===ys&&(ys=!1),null!==nt){if(void 0!==ae[nt])return ae[nt];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+nt+"'")}let Ec=qt;if(qt===ae.RED&&(Yt===ae.FLOAT&&(Ec=ae.R32F),Yt===ae.HALF_FLOAT&&(Ec=ae.R16F),Yt===ae.UNSIGNED_BYTE&&(Ec=ae.R8)),qt===ae.RED_INTEGER&&(Yt===ae.UNSIGNED_BYTE&&(Ec=ae.R8UI),Yt===ae.UNSIGNED_SHORT&&(Ec=ae.R16UI),Yt===ae.UNSIGNED_INT&&(Ec=ae.R32UI),Yt===ae.BYTE&&(Ec=ae.R8I),Yt===ae.SHORT&&(Ec=ae.R16I),Yt===ae.INT&&(Ec=ae.R32I)),qt===ae.RG&&(Yt===ae.FLOAT&&(Ec=ae.RG32F),Yt===ae.HALF_FLOAT&&(Ec=ae.RG16F),Yt===ae.UNSIGNED_BYTE&&(Ec=ae.RG8)),qt===ae.RG_INTEGER&&(Yt===ae.UNSIGNED_BYTE&&(Ec=ae.RG8UI),Yt===ae.UNSIGNED_SHORT&&(Ec=ae.RG16UI),Yt===ae.UNSIGNED_INT&&(Ec=ae.RG32UI),Yt===ae.BYTE&&(Ec=ae.RG8I),Yt===ae.SHORT&&(Ec=ae.RG16I),Yt===ae.INT&&(Ec=ae.RG32I)),qt===ae.RGB_INTEGER&&(Yt===ae.UNSIGNED_BYTE&&(Ec=ae.RGB8UI),Yt===ae.UNSIGNED_SHORT&&(Ec=ae.RGB16UI),Yt===ae.UNSIGNED_INT&&(Ec=ae.RGB32UI),Yt===ae.BYTE&&(Ec=ae.RGB8I),Yt===ae.SHORT&&(Ec=ae.RGB16I),Yt===ae.INT&&(Ec=ae.RGB32I)),qt===ae.RGBA_INTEGER&&(Yt===ae.UNSIGNED_BYTE&&(Ec=ae.RGBA8UI),Yt===ae.UNSIGNED_SHORT&&(Ec=ae.RGBA16UI),Yt===ae.UNSIGNED_INT&&(Ec=ae.RGBA32UI),Yt===ae.BYTE&&(Ec=ae.RGBA8I),Yt===ae.SHORT&&(Ec=ae.RGBA16I),Yt===ae.INT&&(Ec=ae.RGBA32I)),qt===ae.RGB&&Yt===ae.UNSIGNED_INT_5_9_9_9_REV&&(Ec=ae.RGB9_E5),qt===ae.RGBA){const ue=ys?ut.VxR:ut.ppV.getTransfer(Xt);Yt===ae.FLOAT&&(Ec=ae.RGBA32F),Yt===ae.HALF_FLOAT&&(Ec=ae.RGBA16F),Yt===ae.UNSIGNED_BYTE&&(Ec=ue===ut.KLL?ae.SRGB8_ALPHA8:ae.RGBA8),Yt===ae.UNSIGNED_SHORT_4_4_4_4&&(Ec=ae.RGBA4),Yt===ae.UNSIGNED_SHORT_5_5_5_1&&(Ec=ae.RGB5_A1)}return Ec!==ae.R16F&&Ec!==ae.R32F&&Ec!==ae.RG16F&&Ec!==ae.RG32F&&Ec!==ae.RGBA16F&&Ec!==ae.RGBA32F||ue.get("EXT_color_buffer_float"),Ec}function getInternalDepthFormat(ue,nt){let qt;return ue?null===nt||nt===ut.bkx||nt===ut.V3x?qt=ae.DEPTH24_STENCIL8:nt===ut.RQf?qt=ae.DEPTH32F_STENCIL8:nt===ut.cHt&&(qt=ae.DEPTH24_STENCIL8,console.warn("DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.")):null===nt||nt===ut.bkx||nt===ut.V3x?qt=ae.DEPTH_COMPONENT24:nt===ut.RQf?qt=ae.DEPTH_COMPONENT32F:nt===ut.cHt&&(qt=ae.DEPTH_COMPONENT16),qt}function getMipLevels(ae,ue){return!0===textureNeedsGenerateMipmaps(ae)||ae.isFramebufferTexture&&ae.minFilter!==ut.hxR&&ae.minFilter!==ut.k6q?Math.log2(Math.max(ue.width,ue.height))+1:void 0!==ae.mipmaps&&ae.mipmaps.length>0?ae.mipmaps.length:ae.isCompressedTexture&&Array.isArray(ae.image)?ue.mipmaps.length:1}function onTextureDispose(ae){const ue=ae.target;ue.removeEventListener("dispose",onTextureDispose),function(ae){const ue=qt.get(ae);if(void 0===ue.__webglInit)return;const nt=ae.source,ut=wu.get(nt);if(ut){const qt=ut[ue.__cacheKey];qt.usedTimes--,0===qt.usedTimes&&deleteTexture(ae),0===Object.keys(ut).length&&wu.delete(nt)}qt.remove(ae)}(ue),ue.isVideoTexture&&_u.delete(ue)}function onRenderTargetDispose(ue){const nt=ue.target;nt.removeEventListener("dispose",onRenderTargetDispose),function(ue){const nt=qt.get(ue);ue.depthTexture&&(ue.depthTexture.dispose(),qt.remove(ue.depthTexture));if(ue.isWebGLCubeRenderTarget)for(let qt=0;qt<6;qt++){if(Array.isArray(nt.__webglFramebuffer[qt]))for(let ue=0;ue<nt.__webglFramebuffer[qt].length;ue++)ae.deleteFramebuffer(nt.__webglFramebuffer[qt][ue]);else ae.deleteFramebuffer(nt.__webglFramebuffer[qt]);nt.__webglDepthbuffer&&ae.deleteRenderbuffer(nt.__webglDepthbuffer[qt])}else{if(Array.isArray(nt.__webglFramebuffer))for(let ue=0;ue<nt.__webglFramebuffer.length;ue++)ae.deleteFramebuffer(nt.__webglFramebuffer[ue]);else ae.deleteFramebuffer(nt.__webglFramebuffer);if(nt.__webglDepthbuffer&&ae.deleteRenderbuffer(nt.__webglDepthbuffer),nt.__webglMultisampledFramebuffer&&ae.deleteFramebuffer(nt.__webglMultisampledFramebuffer),nt.__webglColorRenderbuffer)for(let ue=0;ue<nt.__webglColorRenderbuffer.length;ue++)nt.__webglColorRenderbuffer[ue]&&ae.deleteRenderbuffer(nt.__webglColorRenderbuffer[ue]);nt.__webglDepthRenderbuffer&&ae.deleteRenderbuffer(nt.__webglDepthRenderbuffer)}const ut=ue.textures;for(let Yt=0,Xt=ut.length;Yt<Xt;Yt++){const ue=qt.get(ut[Yt]);ue.__webglTexture&&(ae.deleteTexture(ue.__webglTexture),ys.memory.textures--),qt.remove(ut[Yt])}qt.remove(ue)}(nt)}function deleteTexture(ue){const nt=qt.get(ue);ae.deleteTexture(nt.__webglTexture);const ut=ue.source;delete wu.get(ut)[nt.__cacheKey],ys.memory.textures--}let qu=0;function setTexture2D(ue,ut){const Yt=qt.get(ue);if(ue.isVideoTexture&&function(ae){const ue=ys.render.frame;_u.get(ae)!==ue&&(_u.set(ae,ue),ae.update())}(ue),!1===ue.isRenderTargetTexture&&!0!==ue.isExternalTexture&&ue.version>0&&Yt.__version!==ue.version){const ae=ue.image;if(null===ae)console.warn("THREE.WebGLRenderer: Texture marked for update but no image data found.");else{if(!1!==ae.complete)return void uploadTexture(Yt,ue,ut);console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete")}}else ue.isExternalTexture&&(Yt.__webglTexture=ue.sourceTexture?ue.sourceTexture:null);nt.bindTexture(ae.TEXTURE_2D,Yt.__webglTexture,ae.TEXTURE0+ut)}const Ju={[ut.GJx]:ae.REPEAT,[ut.ghU]:ae.CLAMP_TO_EDGE,[ut.kTW]:ae.MIRRORED_REPEAT},_h={[ut.hxR]:ae.NEAREST,[ut.pHI]:ae.NEAREST_MIPMAP_NEAREST,[ut.Cfg]:ae.NEAREST_MIPMAP_LINEAR,[ut.k6q]:ae.LINEAR,[ut.kRr]:ae.LINEAR_MIPMAP_NEAREST,[ut.$_I]:ae.LINEAR_MIPMAP_LINEAR},ed={[ut.amv]:ae.NEVER,[ut.FFZ]:ae.ALWAYS,[ut.vim]:ae.LESS,[ut.TiK]:ae.LEQUAL,[ut.kO0]:ae.EQUAL,[ut.gWB]:ae.GEQUAL,[ut.eoi]:ae.GREATER,[ut.jzd]:ae.NOTEQUAL};function setTextureParameters(nt,Xt){if(Xt.type!==ut.RQf||!1!==ue.has("OES_texture_float_linear")||Xt.magFilter!==ut.k6q&&Xt.magFilter!==ut.kRr&&Xt.magFilter!==ut.Cfg&&Xt.magFilter!==ut.$_I&&Xt.minFilter!==ut.k6q&&Xt.minFilter!==ut.kRr&&Xt.minFilter!==ut.Cfg&&Xt.minFilter!==ut.$_I||console.warn("THREE.WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device."),ae.texParameteri(nt,ae.TEXTURE_WRAP_S,Ju[Xt.wrapS]),ae.texParameteri(nt,ae.TEXTURE_WRAP_T,Ju[Xt.wrapT]),nt!==ae.TEXTURE_3D&&nt!==ae.TEXTURE_2D_ARRAY||ae.texParameteri(nt,ae.TEXTURE_WRAP_R,Ju[Xt.wrapR]),ae.texParameteri(nt,ae.TEXTURE_MAG_FILTER,_h[Xt.magFilter]),ae.texParameteri(nt,ae.TEXTURE_MIN_FILTER,_h[Xt.minFilter]),Xt.compareFunction&&(ae.texParameteri(nt,ae.TEXTURE_COMPARE_MODE,ae.COMPARE_REF_TO_TEXTURE),ae.texParameteri(nt,ae.TEXTURE_COMPARE_FUNC,ed[Xt.compareFunction])),!0===ue.has("EXT_texture_filter_anisotropic")){if(Xt.magFilter===ut.hxR)return;if(Xt.minFilter!==ut.Cfg&&Xt.minFilter!==ut.$_I)return;if(Xt.type===ut.RQf&&!1===ue.has("OES_texture_float_linear"))return;if(Xt.anisotropy>1||qt.get(Xt).__currentAnisotropy){const ut=ue.get("EXT_texture_filter_anisotropic");ae.texParameterf(nt,ut.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(Xt.anisotropy,Yt.getMaxAnisotropy())),qt.get(Xt).__currentAnisotropy=Xt.anisotropy}}}function initTexture(ue,nt){let ut=!1;void 0===ue.__webglInit&&(ue.__webglInit=!0,nt.addEventListener("dispose",onTextureDispose));const qt=nt.source;let Yt=wu.get(qt);void 0===Yt&&(Yt={},wu.set(qt,Yt));const Xt=function(ae){const ue=[];return ue.push(ae.wrapS),ue.push(ae.wrapT),ue.push(ae.wrapR||0),ue.push(ae.magFilter),ue.push(ae.minFilter),ue.push(ae.anisotropy),ue.push(ae.internalFormat),ue.push(ae.format),ue.push(ae.type),ue.push(ae.generateMipmaps),ue.push(ae.premultiplyAlpha),ue.push(ae.flipY),ue.push(ae.unpackAlignment),ue.push(ae.colorSpace),ue.join()}(nt);if(Xt!==ue.__cacheKey){void 0===Yt[Xt]&&(Yt[Xt]={texture:ae.createTexture(),usedTimes:0},ys.memory.textures++,ut=!0),Yt[Xt].usedTimes++;const qt=Yt[ue.__cacheKey];void 0!==qt&&(Yt[ue.__cacheKey].usedTimes--,0===qt.usedTimes&&deleteTexture(nt)),ue.__cacheKey=Xt,ue.__webglTexture=Yt[Xt].texture}return ut}function getRow(ae,ue,nt){return Math.floor(Math.floor(ae/nt)/ue)}function uploadTexture(ue,ys,Ec){let lu=ae.TEXTURE_2D;(ys.isDataArrayTexture||ys.isCompressedArrayTexture)&&(lu=ae.TEXTURE_2D_ARRAY),ys.isData3DTexture&&(lu=ae.TEXTURE_3D);const uu=initTexture(ue,ys),_u=ys.source;nt.bindTexture(lu,ue.__webglTexture,ae.TEXTURE0+Ec);const vu=qt.get(_u);if(_u.version!==vu.__version||!0===uu){nt.activeTexture(ae.TEXTURE0+Ec);const ue=ut.ppV.getPrimaries(ut.ppV.workingColorSpace),qt=ys.colorSpace===ut.jf0?null:ut.ppV.getPrimaries(ys.colorSpace),wu=ys.colorSpace===ut.jf0||ue===qt?ae.NONE:ae.BROWSER_DEFAULT_WEBGL;ae.pixelStorei(ae.UNPACK_FLIP_Y_WEBGL,ys.flipY),ae.pixelStorei(ae.UNPACK_PREMULTIPLY_ALPHA_WEBGL,ys.premultiplyAlpha),ae.pixelStorei(ae.UNPACK_ALIGNMENT,ys.unpackAlignment),ae.pixelStorei(ae.UNPACK_COLORSPACE_CONVERSION_WEBGL,wu);let Hu=resizeImage(ys.image,!1,Yt.maxTextureSize);Hu=verifyColorSpace(ys,Hu);const qu=Xt.convert(ys.format,ys.colorSpace),Ju=Xt.convert(ys.type);let _h,ed=getInternalFormat(ys.internalFormat,qu,Ju,ys.colorSpace,ys.isVideoTexture);setTextureParameters(lu,ys);const td=ys.mipmaps,id=!0!==ys.isVideoTexture,nd=void 0===vu.__version||!0===uu,rd=_u.dataReady,ad=getMipLevels(ys,Hu);if(ys.isDepthTexture)ed=getInternalDepthFormat(ys.format===ut.dcC,ys.type),nd&&(id?nt.texStorage2D(ae.TEXTURE_2D,1,ed,Hu.width,Hu.height):nt.texImage2D(ae.TEXTURE_2D,0,ed,Hu.width,Hu.height,0,qu,Ju,null));else if(ys.isDataTexture)if(td.length>0){id&&nd&&nt.texStorage2D(ae.TEXTURE_2D,ad,ed,td[0].width,td[0].height);for(let ue=0,ut=td.length;ue<ut;ue++)_h=td[ue],id?rd&&nt.texSubImage2D(ae.TEXTURE_2D,ue,0,0,_h.width,_h.height,qu,Ju,_h.data):nt.texImage2D(ae.TEXTURE_2D,ue,ed,_h.width,_h.height,0,qu,Ju,_h.data);ys.generateMipmaps=!1}else id?(nd&&nt.texStorage2D(ae.TEXTURE_2D,ad,ed,Hu.width,Hu.height),rd&&function(ue,ut,qt,Yt){const Xt=ue.updateRanges;if(0===Xt.length)nt.texSubImage2D(ae.TEXTURE_2D,0,0,0,ut.width,ut.height,qt,Yt,ut.data);else{Xt.sort(((ae,ue)=>ae.start-ue.start));let ys=0;for(let ae=1;ae<Xt.length;ae++){const ue=Xt[ys],nt=Xt[ae],qt=ue.start+ue.count,Yt=getRow(nt.start,ut.width,4),Ec=getRow(ue.start,ut.width,4);nt.start<=qt+1&&Yt===Ec&&getRow(nt.start+nt.count-1,ut.width,4)===Yt?ue.count=Math.max(ue.count,nt.start+nt.count-ue.start):(++ys,Xt[ys]=nt)}Xt.length=ys+1;const Ec=ae.getParameter(ae.UNPACK_ROW_LENGTH),lu=ae.getParameter(ae.UNPACK_SKIP_PIXELS),uu=ae.getParameter(ae.UNPACK_SKIP_ROWS);ae.pixelStorei(ae.UNPACK_ROW_LENGTH,ut.width);for(let ue=0,_u=Xt.length;ue<_u;ue++){const ys=Xt[ue],Ec=Math.floor(ys.start/4),lu=Math.ceil(ys.count/4),uu=Ec%ut.width,_u=Math.floor(Ec/ut.width),vu=lu,wu=1;ae.pixelStorei(ae.UNPACK_SKIP_PIXELS,uu),ae.pixelStorei(ae.UNPACK_SKIP_ROWS,_u),nt.texSubImage2D(ae.TEXTURE_2D,0,uu,_u,vu,wu,qt,Yt,ut.data)}ue.clearUpdateRanges(),ae.pixelStorei(ae.UNPACK_ROW_LENGTH,Ec),ae.pixelStorei(ae.UNPACK_SKIP_PIXELS,lu),ae.pixelStorei(ae.UNPACK_SKIP_ROWS,uu)}}(ys,Hu,qu,Ju)):nt.texImage2D(ae.TEXTURE_2D,0,ed,Hu.width,Hu.height,0,qu,Ju,Hu.data);else if(ys.isCompressedTexture)if(ys.isCompressedArrayTexture){id&&nd&&nt.texStorage3D(ae.TEXTURE_2D_ARRAY,ad,ed,td[0].width,td[0].height,Hu.depth);for(let ue=0,qt=td.length;ue<qt;ue++)if(_h=td[ue],ys.format!==ut.GWd)if(null!==qu)if(id){if(rd)if(ys.layerUpdates.size>0){const qt=(0,ut.Nex)(_h.width,_h.height,ys.format,ys.type);for(const ut of ys.layerUpdates){const Yt=_h.data.subarray(ut*qt/_h.data.BYTES_PER_ELEMENT,(ut+1)*qt/_h.data.BYTES_PER_ELEMENT);nt.compressedTexSubImage3D(ae.TEXTURE_2D_ARRAY,ue,0,0,ut,_h.width,_h.height,1,qu,Yt)}ys.clearLayerUpdates()}else nt.compressedTexSubImage3D(ae.TEXTURE_2D_ARRAY,ue,0,0,0,_h.width,_h.height,Hu.depth,qu,_h.data)}else nt.compressedTexImage3D(ae.TEXTURE_2D_ARRAY,ue,ed,_h.width,_h.height,Hu.depth,0,_h.data,0,0);else console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()");else id?rd&&nt.texSubImage3D(ae.TEXTURE_2D_ARRAY,ue,0,0,0,_h.width,_h.height,Hu.depth,qu,Ju,_h.data):nt.texImage3D(ae.TEXTURE_2D_ARRAY,ue,ed,_h.width,_h.height,Hu.depth,0,qu,Ju,_h.data)}else{id&&nd&&nt.texStorage2D(ae.TEXTURE_2D,ad,ed,td[0].width,td[0].height);for(let ue=0,qt=td.length;ue<qt;ue++)_h=td[ue],ys.format!==ut.GWd?null!==qu?id?rd&&nt.compressedTexSubImage2D(ae.TEXTURE_2D,ue,0,0,_h.width,_h.height,qu,_h.data):nt.compressedTexImage2D(ae.TEXTURE_2D,ue,ed,_h.width,_h.height,0,_h.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"):id?rd&&nt.texSubImage2D(ae.TEXTURE_2D,ue,0,0,_h.width,_h.height,qu,Ju,_h.data):nt.texImage2D(ae.TEXTURE_2D,ue,ed,_h.width,_h.height,0,qu,Ju,_h.data)}else if(ys.isDataArrayTexture)if(id){if(nd&&nt.texStorage3D(ae.TEXTURE_2D_ARRAY,ad,ed,Hu.width,Hu.height,Hu.depth),rd)if(ys.layerUpdates.size>0){const ue=(0,ut.Nex)(Hu.width,Hu.height,ys.format,ys.type);for(const ut of ys.layerUpdates){const qt=Hu.data.subarray(ut*ue/Hu.data.BYTES_PER_ELEMENT,(ut+1)*ue/Hu.data.BYTES_PER_ELEMENT);nt.texSubImage3D(ae.TEXTURE_2D_ARRAY,0,0,0,ut,Hu.width,Hu.height,1,qu,Ju,qt)}ys.clearLayerUpdates()}else nt.texSubImage3D(ae.TEXTURE_2D_ARRAY,0,0,0,0,Hu.width,Hu.height,Hu.depth,qu,Ju,Hu.data)}else nt.texImage3D(ae.TEXTURE_2D_ARRAY,0,ed,Hu.width,Hu.height,Hu.depth,0,qu,Ju,Hu.data);else if(ys.isData3DTexture)id?(nd&&nt.texStorage3D(ae.TEXTURE_3D,ad,ed,Hu.width,Hu.height,Hu.depth),rd&&nt.texSubImage3D(ae.TEXTURE_3D,0,0,0,0,Hu.width,Hu.height,Hu.depth,qu,Ju,Hu.data)):nt.texImage3D(ae.TEXTURE_3D,0,ed,Hu.width,Hu.height,Hu.depth,0,qu,Ju,Hu.data);else if(ys.isFramebufferTexture){if(nd)if(id)nt.texStorage2D(ae.TEXTURE_2D,ad,ed,Hu.width,Hu.height);else{let ue=Hu.width,ut=Hu.height;for(let qt=0;qt<ad;qt++)nt.texImage2D(ae.TEXTURE_2D,qt,ed,ue,ut,0,qu,Ju,null),ue>>=1,ut>>=1}}else if(td.length>0){if(id&&nd){const ue=getDimensions(td[0]);nt.texStorage2D(ae.TEXTURE_2D,ad,ed,ue.width,ue.height)}for(let ue=0,ut=td.length;ue<ut;ue++)_h=td[ue],id?rd&&nt.texSubImage2D(ae.TEXTURE_2D,ue,0,0,qu,Ju,_h):nt.texImage2D(ae.TEXTURE_2D,ue,ed,qu,Ju,_h);ys.generateMipmaps=!1}else if(id){if(nd){const ue=getDimensions(Hu);nt.texStorage2D(ae.TEXTURE_2D,ad,ed,ue.width,ue.height)}rd&&nt.texSubImage2D(ae.TEXTURE_2D,0,0,0,qu,Ju,Hu)}else nt.texImage2D(ae.TEXTURE_2D,0,ed,qu,Ju,Hu);textureNeedsGenerateMipmaps(ys)&&generateMipmap(lu),vu.__version=_u.version,ys.onUpdate&&ys.onUpdate(ys)}ue.__version=ys.version}function setupFrameBufferTexture(ue,ut,Yt,ys,lu,uu){const _u=Xt.convert(Yt.format,Yt.colorSpace),vu=Xt.convert(Yt.type),wu=getInternalFormat(Yt.internalFormat,_u,vu,Yt.colorSpace),Hu=qt.get(ut),qu=qt.get(Yt);if(qu.__renderTarget=ut,!Hu.__hasExternalTextures){const ue=Math.max(1,ut.width>>uu),qt=Math.max(1,ut.height>>uu);lu===ae.TEXTURE_3D||lu===ae.TEXTURE_2D_ARRAY?nt.texImage3D(lu,uu,wu,ue,qt,ut.depth,0,_u,vu,null):nt.texImage2D(lu,uu,wu,ue,qt,0,_u,vu,null)}nt.bindFramebuffer(ae.FRAMEBUFFER,ue),useMultisampledRTT(ut)?Ec.framebufferTexture2DMultisampleEXT(ae.FRAMEBUFFER,ys,lu,qu.__webglTexture,0,getRenderTargetSamples(ut)):(lu===ae.TEXTURE_2D||lu>=ae.TEXTURE_CUBE_MAP_POSITIVE_X&&lu<=ae.TEXTURE_CUBE_MAP_NEGATIVE_Z)&&ae.framebufferTexture2D(ae.FRAMEBUFFER,ys,lu,qu.__webglTexture,uu),nt.bindFramebuffer(ae.FRAMEBUFFER,null)}function setupRenderBufferStorage(ue,nt,ut){if(ae.bindRenderbuffer(ae.RENDERBUFFER,ue),nt.depthBuffer){const qt=nt.depthTexture,Yt=qt&&qt.isDepthTexture?qt.type:null,Xt=getInternalDepthFormat(nt.stencilBuffer,Yt),ys=nt.stencilBuffer?ae.DEPTH_STENCIL_ATTACHMENT:ae.DEPTH_ATTACHMENT,lu=getRenderTargetSamples(nt);useMultisampledRTT(nt)?Ec.renderbufferStorageMultisampleEXT(ae.RENDERBUFFER,lu,Xt,nt.width,nt.height):ut?ae.renderbufferStorageMultisample(ae.RENDERBUFFER,lu,Xt,nt.width,nt.height):ae.renderbufferStorage(ae.RENDERBUFFER,Xt,nt.width,nt.height),ae.framebufferRenderbuffer(ae.FRAMEBUFFER,ys,ae.RENDERBUFFER,ue)}else{const ue=nt.textures;for(let qt=0;qt<ue.length;qt++){const Yt=ue[qt],ys=Xt.convert(Yt.format,Yt.colorSpace),lu=Xt.convert(Yt.type),uu=getInternalFormat(Yt.internalFormat,ys,lu,Yt.colorSpace),_u=getRenderTargetSamples(nt);ut&&!1===useMultisampledRTT(nt)?ae.renderbufferStorageMultisample(ae.RENDERBUFFER,_u,uu,nt.width,nt.height):useMultisampledRTT(nt)?Ec.renderbufferStorageMultisampleEXT(ae.RENDERBUFFER,_u,uu,nt.width,nt.height):ae.renderbufferStorage(ae.RENDERBUFFER,uu,nt.width,nt.height)}}ae.bindRenderbuffer(ae.RENDERBUFFER,null)}function setupDepthTexture(ue,Yt){if(Yt&&Yt.isWebGLCubeRenderTarget)throw new Error("Depth Texture with cube render targets is not supported");if(nt.bindFramebuffer(ae.FRAMEBUFFER,ue),!Yt.depthTexture||!Yt.depthTexture.isDepthTexture)throw new Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");const Xt=qt.get(Yt.depthTexture);Xt.__renderTarget=Yt,Xt.__webglTexture&&Yt.depthTexture.image.width===Yt.width&&Yt.depthTexture.image.height===Yt.height||(Yt.depthTexture.image.width=Yt.width,Yt.depthTexture.image.height=Yt.height,Yt.depthTexture.needsUpdate=!0),setTexture2D(Yt.depthTexture,0);const ys=Xt.__webglTexture,lu=getRenderTargetSamples(Yt);if(Yt.depthTexture.format===ut.zdS)useMultisampledRTT(Yt)?Ec.framebufferTexture2DMultisampleEXT(ae.FRAMEBUFFER,ae.DEPTH_ATTACHMENT,ae.TEXTURE_2D,ys,0,lu):ae.framebufferTexture2D(ae.FRAMEBUFFER,ae.DEPTH_ATTACHMENT,ae.TEXTURE_2D,ys,0);else{if(Yt.depthTexture.format!==ut.dcC)throw new Error("Unknown depthTexture format");useMultisampledRTT(Yt)?Ec.framebufferTexture2DMultisampleEXT(ae.FRAMEBUFFER,ae.DEPTH_STENCIL_ATTACHMENT,ae.TEXTURE_2D,ys,0,lu):ae.framebufferTexture2D(ae.FRAMEBUFFER,ae.DEPTH_STENCIL_ATTACHMENT,ae.TEXTURE_2D,ys,0)}}function setupDepthRenderbuffer(ue){const ut=qt.get(ue),Yt=!0===ue.isWebGLCubeRenderTarget;if(ut.__boundDepthTexture!==ue.depthTexture){const ae=ue.depthTexture;if(ut.__depthDisposeCallback&&ut.__depthDisposeCallback(),ae){const disposeEvent=()=>{delete ut.__boundDepthTexture,delete ut.__depthDisposeCallback,ae.removeEventListener("dispose",disposeEvent)};ae.addEventListener("dispose",disposeEvent),ut.__depthDisposeCallback=disposeEvent}ut.__boundDepthTexture=ae}if(ue.depthTexture&&!ut.__autoAllocateDepthBuffer){if(Yt)throw new Error("target.depthTexture not supported in Cube render targets");const ae=ue.texture.mipmaps;ae&&ae.length>0?setupDepthTexture(ut.__webglFramebuffer[0],ue):setupDepthTexture(ut.__webglFramebuffer,ue)}else if(Yt){ut.__webglDepthbuffer=[];for(let qt=0;qt<6;qt++)if(nt.bindFramebuffer(ae.FRAMEBUFFER,ut.__webglFramebuffer[qt]),void 0===ut.__webglDepthbuffer[qt])ut.__webglDepthbuffer[qt]=ae.createRenderbuffer(),setupRenderBufferStorage(ut.__webglDepthbuffer[qt],ue,!1);else{const nt=ue.stencilBuffer?ae.DEPTH_STENCIL_ATTACHMENT:ae.DEPTH_ATTACHMENT,Yt=ut.__webglDepthbuffer[qt];ae.bindRenderbuffer(ae.RENDERBUFFER,Yt),ae.framebufferRenderbuffer(ae.FRAMEBUFFER,nt,ae.RENDERBUFFER,Yt)}}else{const qt=ue.texture.mipmaps;if(qt&&qt.length>0?nt.bindFramebuffer(ae.FRAMEBUFFER,ut.__webglFramebuffer[0]):nt.bindFramebuffer(ae.FRAMEBUFFER,ut.__webglFramebuffer),void 0===ut.__webglDepthbuffer)ut.__webglDepthbuffer=ae.createRenderbuffer(),setupRenderBufferStorage(ut.__webglDepthbuffer,ue,!1);else{const nt=ue.stencilBuffer?ae.DEPTH_STENCIL_ATTACHMENT:ae.DEPTH_ATTACHMENT,qt=ut.__webglDepthbuffer;ae.bindRenderbuffer(ae.RENDERBUFFER,qt),ae.framebufferRenderbuffer(ae.FRAMEBUFFER,nt,ae.RENDERBUFFER,qt)}}nt.bindFramebuffer(ae.FRAMEBUFFER,null)}const td=[],id=[];function getRenderTargetSamples(ae){return Math.min(Yt.maxSamples,ae.samples)}function useMultisampledRTT(ae){const nt=qt.get(ae);return ae.samples>0&&!0===ue.has("WEBGL_multisampled_render_to_texture")&&!1!==nt.__useRenderToTexture}function verifyColorSpace(ae,ue){const nt=ae.colorSpace,qt=ae.format,Yt=ae.type;return!0===ae.isCompressedTexture||!0===ae.isVideoTexture||nt!==ut.Zr2&&nt!==ut.jf0&&(ut.ppV.getTransfer(nt)===ut.KLL?qt===ut.GWd&&Yt===ut.OUM||console.warn("THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType."):console.error("THREE.WebGLTextures: Unsupported texture color space:",nt)),ue}function getDimensions(ae){return"undefined"!==typeof HTMLImageElement&&ae instanceof HTMLImageElement?(uu.width=ae.naturalWidth||ae.width,uu.height=ae.naturalHeight||ae.height):"undefined"!==typeof VideoFrame&&ae instanceof VideoFrame?(uu.width=ae.displayWidth,uu.height=ae.displayHeight):(uu.width=ae.width,uu.height=ae.height),uu}this.allocateTextureUnit=function(){const ae=qu;return ae>=Yt.maxTextures&&console.warn("THREE.WebGLTextures: Trying to use "+ae+" texture units while this GPU supports only "+Yt.maxTextures),qu+=1,ae},this.resetTextureUnits=function(){qu=0},this.setTexture2D=setTexture2D,this.setTexture2DArray=function(ue,ut){const Yt=qt.get(ue);!1===ue.isRenderTargetTexture&&ue.version>0&&Yt.__version!==ue.version?uploadTexture(Yt,ue,ut):nt.bindTexture(ae.TEXTURE_2D_ARRAY,Yt.__webglTexture,ae.TEXTURE0+ut)},this.setTexture3D=function(ue,ut){const Yt=qt.get(ue);!1===ue.isRenderTargetTexture&&ue.version>0&&Yt.__version!==ue.version?uploadTexture(Yt,ue,ut):nt.bindTexture(ae.TEXTURE_3D,Yt.__webglTexture,ae.TEXTURE0+ut)},this.setTextureCube=function(ue,ys){const Ec=qt.get(ue);ue.version>0&&Ec.__version!==ue.version?function(ue,ys,Ec){if(6!==ys.image.length)return;const lu=initTexture(ue,ys),uu=ys.source;nt.bindTexture(ae.TEXTURE_CUBE_MAP,ue.__webglTexture,ae.TEXTURE0+Ec);const _u=qt.get(uu);if(uu.version!==_u.__version||!0===lu){nt.activeTexture(ae.TEXTURE0+Ec);const ue=ut.ppV.getPrimaries(ut.ppV.workingColorSpace),qt=ys.colorSpace===ut.jf0?null:ut.ppV.getPrimaries(ys.colorSpace),vu=ys.colorSpace===ut.jf0||ue===qt?ae.NONE:ae.BROWSER_DEFAULT_WEBGL;ae.pixelStorei(ae.UNPACK_FLIP_Y_WEBGL,ys.flipY),ae.pixelStorei(ae.UNPACK_PREMULTIPLY_ALPHA_WEBGL,ys.premultiplyAlpha),ae.pixelStorei(ae.UNPACK_ALIGNMENT,ys.unpackAlignment),ae.pixelStorei(ae.UNPACK_COLORSPACE_CONVERSION_WEBGL,vu);const wu=ys.isCompressedTexture||ys.image[0].isCompressedTexture,Hu=ys.image[0]&&ys.image[0].isDataTexture,qu=[];for(let ae=0;ae<6;ae++)qu[ae]=wu||Hu?Hu?ys.image[ae].image:ys.image[ae]:resizeImage(ys.image[ae],!0,Yt.maxCubemapSize),qu[ae]=verifyColorSpace(ys,qu[ae]);const Ju=qu[0],_h=Xt.convert(ys.format,ys.colorSpace),ed=Xt.convert(ys.type),td=getInternalFormat(ys.internalFormat,_h,ed,ys.colorSpace),id=!0!==ys.isVideoTexture,nd=void 0===_u.__version||!0===lu,rd=uu.dataReady;let ad,sd=getMipLevels(ys,Ju);if(setTextureParameters(ae.TEXTURE_CUBE_MAP,ys),wu){id&&nd&&nt.texStorage2D(ae.TEXTURE_CUBE_MAP,sd,td,Ju.width,Ju.height);for(let ue=0;ue<6;ue++){ad=qu[ue].mipmaps;for(let qt=0;qt<ad.length;qt++){const Yt=ad[qt];ys.format!==ut.GWd?null!==_h?id?rd&&nt.compressedTexSubImage2D(ae.TEXTURE_CUBE_MAP_POSITIVE_X+ue,qt,0,0,Yt.width,Yt.height,_h,Yt.data):nt.compressedTexImage2D(ae.TEXTURE_CUBE_MAP_POSITIVE_X+ue,qt,td,Yt.width,Yt.height,0,Yt.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()"):id?rd&&nt.texSubImage2D(ae.TEXTURE_CUBE_MAP_POSITIVE_X+ue,qt,0,0,Yt.width,Yt.height,_h,ed,Yt.data):nt.texImage2D(ae.TEXTURE_CUBE_MAP_POSITIVE_X+ue,qt,td,Yt.width,Yt.height,0,_h,ed,Yt.data)}}}else{if(ad=ys.mipmaps,id&&nd){ad.length>0&&sd++;const ue=getDimensions(qu[0]);nt.texStorage2D(ae.TEXTURE_CUBE_MAP,sd,td,ue.width,ue.height)}for(let ue=0;ue<6;ue++)if(Hu){id?rd&&nt.texSubImage2D(ae.TEXTURE_CUBE_MAP_POSITIVE_X+ue,0,0,0,qu[ue].width,qu[ue].height,_h,ed,qu[ue].data):nt.texImage2D(ae.TEXTURE_CUBE_MAP_POSITIVE_X+ue,0,td,qu[ue].width,qu[ue].height,0,_h,ed,qu[ue].data);for(let ut=0;ut<ad.length;ut++){const qt=ad[ut].image[ue].image;id?rd&&nt.texSubImage2D(ae.TEXTURE_CUBE_MAP_POSITIVE_X+ue,ut+1,0,0,qt.width,qt.height,_h,ed,qt.data):nt.texImage2D(ae.TEXTURE_CUBE_MAP_POSITIVE_X+ue,ut+1,td,qt.width,qt.height,0,_h,ed,qt.data)}}else{id?rd&&nt.texSubImage2D(ae.TEXTURE_CUBE_MAP_POSITIVE_X+ue,0,0,0,_h,ed,qu[ue]):nt.texImage2D(ae.TEXTURE_CUBE_MAP_POSITIVE_X+ue,0,td,_h,ed,qu[ue]);for(let ut=0;ut<ad.length;ut++){const qt=ad[ut];id?rd&&nt.texSubImage2D(ae.TEXTURE_CUBE_MAP_POSITIVE_X+ue,ut+1,0,0,_h,ed,qt.image[ue]):nt.texImage2D(ae.TEXTURE_CUBE_MAP_POSITIVE_X+ue,ut+1,td,_h,ed,qt.image[ue])}}}textureNeedsGenerateMipmaps(ys)&&generateMipmap(ae.TEXTURE_CUBE_MAP),_u.__version=uu.version,ys.onUpdate&&ys.onUpdate(ys)}ue.__version=ys.version}(Ec,ue,ys):nt.bindTexture(ae.TEXTURE_CUBE_MAP,Ec.__webglTexture,ae.TEXTURE0+ys)},this.rebindTextures=function(ue,nt,ut){const Yt=qt.get(ue);void 0!==nt&&setupFrameBufferTexture(Yt.__webglFramebuffer,ue,ue.texture,ae.COLOR_ATTACHMENT0,ae.TEXTURE_2D,0),void 0!==ut&&setupDepthRenderbuffer(ue)},this.setupRenderTarget=function(ue){const ut=ue.texture,Yt=qt.get(ue),Ec=qt.get(ut);ue.addEventListener("dispose",onRenderTargetDispose);const lu=ue.textures,uu=!0===ue.isWebGLCubeRenderTarget,_u=lu.length>1;if(_u||(void 0===Ec.__webglTexture&&(Ec.__webglTexture=ae.createTexture()),Ec.__version=ut.version,ys.memory.textures++),uu){Yt.__webglFramebuffer=[];for(let ue=0;ue<6;ue++)if(ut.mipmaps&&ut.mipmaps.length>0){Yt.__webglFramebuffer[ue]=[];for(let nt=0;nt<ut.mipmaps.length;nt++)Yt.__webglFramebuffer[ue][nt]=ae.createFramebuffer()}else Yt.__webglFramebuffer[ue]=ae.createFramebuffer()}else{if(ut.mipmaps&&ut.mipmaps.length>0){Yt.__webglFramebuffer=[];for(let ue=0;ue<ut.mipmaps.length;ue++)Yt.__webglFramebuffer[ue]=ae.createFramebuffer()}else Yt.__webglFramebuffer=ae.createFramebuffer();if(_u)for(let ue=0,nt=lu.length;ue<nt;ue++){const nt=qt.get(lu[ue]);void 0===nt.__webglTexture&&(nt.__webglTexture=ae.createTexture(),ys.memory.textures++)}if(ue.samples>0&&!1===useMultisampledRTT(ue)){Yt.__webglMultisampledFramebuffer=ae.createFramebuffer(),Yt.__webglColorRenderbuffer=[],nt.bindFramebuffer(ae.FRAMEBUFFER,Yt.__webglMultisampledFramebuffer);for(let nt=0;nt<lu.length;nt++){const ut=lu[nt];Yt.__webglColorRenderbuffer[nt]=ae.createRenderbuffer(),ae.bindRenderbuffer(ae.RENDERBUFFER,Yt.__webglColorRenderbuffer[nt]);const qt=Xt.convert(ut.format,ut.colorSpace),ys=Xt.convert(ut.type),Ec=getInternalFormat(ut.internalFormat,qt,ys,ut.colorSpace,!0===ue.isXRRenderTarget),uu=getRenderTargetSamples(ue);ae.renderbufferStorageMultisample(ae.RENDERBUFFER,uu,Ec,ue.width,ue.height),ae.framebufferRenderbuffer(ae.FRAMEBUFFER,ae.COLOR_ATTACHMENT0+nt,ae.RENDERBUFFER,Yt.__webglColorRenderbuffer[nt])}ae.bindRenderbuffer(ae.RENDERBUFFER,null),ue.depthBuffer&&(Yt.__webglDepthRenderbuffer=ae.createRenderbuffer(),setupRenderBufferStorage(Yt.__webglDepthRenderbuffer,ue,!0)),nt.bindFramebuffer(ae.FRAMEBUFFER,null)}}if(uu){nt.bindTexture(ae.TEXTURE_CUBE_MAP,Ec.__webglTexture),setTextureParameters(ae.TEXTURE_CUBE_MAP,ut);for(let nt=0;nt<6;nt++)if(ut.mipmaps&&ut.mipmaps.length>0)for(let qt=0;qt<ut.mipmaps.length;qt++)setupFrameBufferTexture(Yt.__webglFramebuffer[nt][qt],ue,ut,ae.COLOR_ATTACHMENT0,ae.TEXTURE_CUBE_MAP_POSITIVE_X+nt,qt);else setupFrameBufferTexture(Yt.__webglFramebuffer[nt],ue,ut,ae.COLOR_ATTACHMENT0,ae.TEXTURE_CUBE_MAP_POSITIVE_X+nt,0);textureNeedsGenerateMipmaps(ut)&&generateMipmap(ae.TEXTURE_CUBE_MAP),nt.unbindTexture()}else if(_u){for(let ut=0,Xt=lu.length;ut<Xt;ut++){const Xt=lu[ut],ys=qt.get(Xt);let Ec=ae.TEXTURE_2D;(ue.isWebGL3DRenderTarget||ue.isWebGLArrayRenderTarget)&&(Ec=ue.isWebGL3DRenderTarget?ae.TEXTURE_3D:ae.TEXTURE_2D_ARRAY),nt.bindTexture(Ec,ys.__webglTexture),setTextureParameters(Ec,Xt),setupFrameBufferTexture(Yt.__webglFramebuffer,ue,Xt,ae.COLOR_ATTACHMENT0+ut,Ec,0),textureNeedsGenerateMipmaps(Xt)&&generateMipmap(Ec)}nt.unbindTexture()}else{let qt=ae.TEXTURE_2D;if((ue.isWebGL3DRenderTarget||ue.isWebGLArrayRenderTarget)&&(qt=ue.isWebGL3DRenderTarget?ae.TEXTURE_3D:ae.TEXTURE_2D_ARRAY),nt.bindTexture(qt,Ec.__webglTexture),setTextureParameters(qt,ut),ut.mipmaps&&ut.mipmaps.length>0)for(let nt=0;nt<ut.mipmaps.length;nt++)setupFrameBufferTexture(Yt.__webglFramebuffer[nt],ue,ut,ae.COLOR_ATTACHMENT0,qt,nt);else setupFrameBufferTexture(Yt.__webglFramebuffer,ue,ut,ae.COLOR_ATTACHMENT0,qt,0);textureNeedsGenerateMipmaps(ut)&&generateMipmap(qt),nt.unbindTexture()}ue.depthBuffer&&setupDepthRenderbuffer(ue)},this.updateRenderTargetMipmap=function(ae){const ue=ae.textures;for(let ut=0,Yt=ue.length;ut<Yt;ut++){const Yt=ue[ut];if(textureNeedsGenerateMipmaps(Yt)){const ue=getTargetType(ae),ut=qt.get(Yt).__webglTexture;nt.bindTexture(ue,ut),generateMipmap(ue),nt.unbindTexture()}}},this.updateMultisampleRenderTarget=function(ue){if(ue.samples>0)if(!1===useMultisampledRTT(ue)){const ut=ue.textures,Yt=ue.width,Xt=ue.height;let ys=ae.COLOR_BUFFER_BIT;const Ec=ue.stencilBuffer?ae.DEPTH_STENCIL_ATTACHMENT:ae.DEPTH_ATTACHMENT,uu=qt.get(ue),_u=ut.length>1;if(_u)for(let ue=0;ue<ut.length;ue++)nt.bindFramebuffer(ae.FRAMEBUFFER,uu.__webglMultisampledFramebuffer),ae.framebufferRenderbuffer(ae.FRAMEBUFFER,ae.COLOR_ATTACHMENT0+ue,ae.RENDERBUFFER,null),nt.bindFramebuffer(ae.FRAMEBUFFER,uu.__webglFramebuffer),ae.framebufferTexture2D(ae.DRAW_FRAMEBUFFER,ae.COLOR_ATTACHMENT0+ue,ae.TEXTURE_2D,null,0);nt.bindFramebuffer(ae.READ_FRAMEBUFFER,uu.__webglMultisampledFramebuffer);const vu=ue.texture.mipmaps;vu&&vu.length>0?nt.bindFramebuffer(ae.DRAW_FRAMEBUFFER,uu.__webglFramebuffer[0]):nt.bindFramebuffer(ae.DRAW_FRAMEBUFFER,uu.__webglFramebuffer);for(let nt=0;nt<ut.length;nt++){if(ue.resolveDepthBuffer&&(ue.depthBuffer&&(ys|=ae.DEPTH_BUFFER_BIT),ue.stencilBuffer&&ue.resolveStencilBuffer&&(ys|=ae.STENCIL_BUFFER_BIT)),_u){ae.framebufferRenderbuffer(ae.READ_FRAMEBUFFER,ae.COLOR_ATTACHMENT0,ae.RENDERBUFFER,uu.__webglColorRenderbuffer[nt]);const ue=qt.get(ut[nt]).__webglTexture;ae.framebufferTexture2D(ae.DRAW_FRAMEBUFFER,ae.COLOR_ATTACHMENT0,ae.TEXTURE_2D,ue,0)}ae.blitFramebuffer(0,0,Yt,Xt,0,0,Yt,Xt,ys,ae.NEAREST),!0===lu&&(td.length=0,id.length=0,td.push(ae.COLOR_ATTACHMENT0+nt),ue.depthBuffer&&!1===ue.resolveDepthBuffer&&(td.push(Ec),id.push(Ec),ae.invalidateFramebuffer(ae.DRAW_FRAMEBUFFER,id)),ae.invalidateFramebuffer(ae.READ_FRAMEBUFFER,td))}if(nt.bindFramebuffer(ae.READ_FRAMEBUFFER,null),nt.bindFramebuffer(ae.DRAW_FRAMEBUFFER,null),_u)for(let ue=0;ue<ut.length;ue++){nt.bindFramebuffer(ae.FRAMEBUFFER,uu.__webglMultisampledFramebuffer),ae.framebufferRenderbuffer(ae.FRAMEBUFFER,ae.COLOR_ATTACHMENT0+ue,ae.RENDERBUFFER,uu.__webglColorRenderbuffer[ue]);const Yt=qt.get(ut[ue]).__webglTexture;nt.bindFramebuffer(ae.FRAMEBUFFER,uu.__webglFramebuffer),ae.framebufferTexture2D(ae.DRAW_FRAMEBUFFER,ae.COLOR_ATTACHMENT0+ue,ae.TEXTURE_2D,Yt,0)}nt.bindFramebuffer(ae.DRAW_FRAMEBUFFER,uu.__webglMultisampledFramebuffer)}else if(ue.depthBuffer&&!1===ue.resolveDepthBuffer&&lu){const nt=ue.stencilBuffer?ae.DEPTH_STENCIL_ATTACHMENT:ae.DEPTH_ATTACHMENT;ae.invalidateFramebuffer(ae.DRAW_FRAMEBUFFER,[nt])}},this.setupDepthRenderbuffer=setupDepthRenderbuffer,this.setupFrameBufferTexture=setupFrameBufferTexture,this.useMultisampledRTT=useMultisampledRTT}function WebGLUtils(ae,ue){return{convert:function(nt,qt){let Yt;void 0===qt&&(qt=ut.jf0);const Xt=ut.ppV.getTransfer(qt);if(nt===ut.OUM)return ae.UNSIGNED_BYTE;if(nt===ut.Wew)return ae.UNSIGNED_SHORT_4_4_4_4;if(nt===ut.gJ2)return ae.UNSIGNED_SHORT_5_5_5_1;if(nt===ut.Dmk)return ae.UNSIGNED_INT_5_9_9_9_REV;if(nt===ut.tJf)return ae.BYTE;if(nt===ut.fBL)return ae.SHORT;if(nt===ut.cHt)return ae.UNSIGNED_SHORT;if(nt===ut.Yuy)return ae.INT;if(nt===ut.bkx)return ae.UNSIGNED_INT;if(nt===ut.RQf)return ae.FLOAT;if(nt===ut.ix0)return ae.HALF_FLOAT;if(nt===ut.wrO)return ae.ALPHA;if(nt===ut.HIg)return ae.RGB;if(nt===ut.GWd)return ae.RGBA;if(nt===ut.zdS)return ae.DEPTH_COMPONENT;if(nt===ut.dcC)return ae.DEPTH_STENCIL;if(nt===ut.VT0)return ae.RED;if(nt===ut.ZQM)return ae.RED_INTEGER;if(nt===ut.paN)return ae.RG;if(nt===ut.TkQ)return ae.RG_INTEGER;if(nt===ut.c90)return ae.RGBA_INTEGER;if(nt===ut.IE4||nt===ut.Nz6||nt===ut.jR7||nt===ut.BXX)if(Xt===ut.KLL){if(Yt=ue.get("WEBGL_compressed_texture_s3tc_srgb"),null===Yt)return null;if(nt===ut.IE4)return Yt.COMPRESSED_SRGB_S3TC_DXT1_EXT;if(nt===ut.Nz6)return Yt.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;if(nt===ut.jR7)return Yt.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;if(nt===ut.BXX)return Yt.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}else{if(Yt=ue.get("WEBGL_compressed_texture_s3tc"),null===Yt)return null;if(nt===ut.IE4)return Yt.COMPRESSED_RGB_S3TC_DXT1_EXT;if(nt===ut.Nz6)return Yt.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(nt===ut.jR7)return Yt.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(nt===ut.BXX)return Yt.COMPRESSED_RGBA_S3TC_DXT5_EXT}if(nt===ut.k6Q||nt===ut.kTp||nt===ut.HXV||nt===ut.pBf){if(Yt=ue.get("WEBGL_compressed_texture_pvrtc"),null===Yt)return null;if(nt===ut.k6Q)return Yt.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(nt===ut.kTp)return Yt.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(nt===ut.HXV)return Yt.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(nt===ut.pBf)return Yt.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(nt===ut.CVz||nt===ut.Riy||nt===ut.KDk){if(Yt=ue.get("WEBGL_compressed_texture_etc"),null===Yt)return null;if(nt===ut.CVz||nt===ut.Riy)return Xt===ut.KLL?Yt.COMPRESSED_SRGB8_ETC2:Yt.COMPRESSED_RGB8_ETC2;if(nt===ut.KDk)return Xt===ut.KLL?Yt.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:Yt.COMPRESSED_RGBA8_ETC2_EAC}if(nt===ut.qa3||nt===ut.B_h||nt===ut.czI||nt===ut.rSH||nt===ut.Qrf||nt===ut.psI||nt===ut.a5J||nt===ut._QJ||nt===ut.uB5||nt===ut.lyL||nt===ut.bC7||nt===ut.y3Z||nt===ut.ojs||nt===ut.S$4){if(Yt=ue.get("WEBGL_compressed_texture_astc"),null===Yt)return null;if(nt===ut.qa3)return Xt===ut.KLL?Yt.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:Yt.COMPRESSED_RGBA_ASTC_4x4_KHR;if(nt===ut.B_h)return Xt===ut.KLL?Yt.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:Yt.COMPRESSED_RGBA_ASTC_5x4_KHR;if(nt===ut.czI)return Xt===ut.KLL?Yt.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:Yt.COMPRESSED_RGBA_ASTC_5x5_KHR;if(nt===ut.rSH)return Xt===ut.KLL?Yt.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:Yt.COMPRESSED_RGBA_ASTC_6x5_KHR;if(nt===ut.Qrf)return Xt===ut.KLL?Yt.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:Yt.COMPRESSED_RGBA_ASTC_6x6_KHR;if(nt===ut.psI)return Xt===ut.KLL?Yt.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:Yt.COMPRESSED_RGBA_ASTC_8x5_KHR;if(nt===ut.a5J)return Xt===ut.KLL?Yt.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:Yt.COMPRESSED_RGBA_ASTC_8x6_KHR;if(nt===ut._QJ)return Xt===ut.KLL?Yt.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:Yt.COMPRESSED_RGBA_ASTC_8x8_KHR;if(nt===ut.uB5)return Xt===ut.KLL?Yt.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:Yt.COMPRESSED_RGBA_ASTC_10x5_KHR;if(nt===ut.lyL)return Xt===ut.KLL?Yt.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:Yt.COMPRESSED_RGBA_ASTC_10x6_KHR;if(nt===ut.bC7)return Xt===ut.KLL?Yt.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:Yt.COMPRESSED_RGBA_ASTC_10x8_KHR;if(nt===ut.y3Z)return Xt===ut.KLL?Yt.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:Yt.COMPRESSED_RGBA_ASTC_10x10_KHR;if(nt===ut.ojs)return Xt===ut.KLL?Yt.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:Yt.COMPRESSED_RGBA_ASTC_12x10_KHR;if(nt===ut.S$4)return Xt===ut.KLL?Yt.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:Yt.COMPRESSED_RGBA_ASTC_12x12_KHR}if(nt===ut.Fn||nt===ut.H23||nt===ut.W9U){if(Yt=ue.get("EXT_texture_compression_bptc"),null===Yt)return null;if(nt===ut.Fn)return Xt===ut.KLL?Yt.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:Yt.COMPRESSED_RGBA_BPTC_UNORM_EXT;if(nt===ut.H23)return Yt.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT;if(nt===ut.W9U)return Yt.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT}if(nt===ut.Kef||nt===ut.XG_||nt===ut.HO_||nt===ut.CWW){if(Yt=ue.get("EXT_texture_compression_rgtc"),null===Yt)return null;if(nt===ut.Fn)return Yt.COMPRESSED_RED_RGTC1_EXT;if(nt===ut.XG_)return Yt.COMPRESSED_SIGNED_RED_RGTC1_EXT;if(nt===ut.HO_)return Yt.COMPRESSED_RED_GREEN_RGTC2_EXT;if(nt===ut.CWW)return Yt.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT}return nt===ut.V3x?ae.UNSIGNED_INT_24_8:void 0!==ae[nt]?ae[nt]:null}}}class ExternalTexture extends ut.gPd{constructor(ae){void 0===ae&&(ae=null),super(),this.sourceTexture=ae,this.isExternalTexture=!0}}class WebXRDepthSensing{constructor(){this.texture=null,this.mesh=null,this.depthNear=0,this.depthFar=0}init(ae,ue){if(null===this.texture){const nt=new ExternalTexture(ae.texture);ae.depthNear===ue.depthNear&&ae.depthFar===ue.depthFar||(this.depthNear=ae.depthNear,this.depthFar=ae.depthFar),this.texture=nt}}getMesh(ae){if(null!==this.texture&&null===this.mesh){const ue=ae.cameras[0].viewport,nt=new ut.BKk({vertexShader:"\nvoid main() {\n\n\tgl_Position = vec4( position, 1.0 );\n\n}",fragmentShader:"\nuniform sampler2DArray depthColor;\nuniform float depthWidth;\nuniform float depthHeight;\n\nvoid main() {\n\n\tvec2 coord = vec2( gl_FragCoord.x / depthWidth, gl_FragCoord.y / depthHeight );\n\n\tif ( coord.x >= 1.0 ) {\n\n\t\tgl_FragDepth = texture( depthColor, vec3( coord.x - 1.0, coord.y, 1 ) ).r;\n\n\t} else {\n\n\t\tgl_FragDepth = texture( depthColor, vec3( coord.x, coord.y, 0 ) ).r;\n\n\t}\n\n}",uniforms:{depthColor:{value:this.texture},depthWidth:{value:ue.z},depthHeight:{value:ue.w}}});this.mesh=new ut.eaF(new ut.bdM(20,20),nt)}return this.mesh}reset(){this.texture=null,this.mesh=null}getDepthTexture(){return this.texture}}class WebXRManager extends ut.Qev{constructor(ae,ue){super();const nt=this;let qt=null,Yt=1,Xt=null,ys="local-floor",Ec=1,lu=null,uu=null,_u=null,vu=null,wu=null,Hu=null;const qu=new WebXRDepthSensing,Ju={},_h=ue.getContextAttributes();let ed=null,td=null;const id=[],nd=[],rd=new ut.I9Y;let ad=null;const sd=new ut.ubm;sd.viewport=new ut.IUQ;const od=new ut.ubm;od.viewport=new ut.IUQ;const ld=[sd,od],cd=new ut.nZQ;let ud=null,hd=null;function onSessionEvent(ae){const ue=nd.indexOf(ae.inputSource);if(-1===ue)return;const nt=id[ue];void 0!==nt&&(nt.update(ae.inputSource,ae.frame,lu||Xt),nt.dispatchEvent({type:ae.type,data:ae.inputSource}))}function onSessionEnd(){qt.removeEventListener("select",onSessionEvent),qt.removeEventListener("selectstart",onSessionEvent),qt.removeEventListener("selectend",onSessionEvent),qt.removeEventListener("squeeze",onSessionEvent),qt.removeEventListener("squeezestart",onSessionEvent),qt.removeEventListener("squeezeend",onSessionEvent),qt.removeEventListener("end",onSessionEnd),qt.removeEventListener("inputsourceschange",onInputSourcesChange);for(let ae=0;ae<id.length;ae++){const ue=nd[ae];null!==ue&&(nd[ae]=null,id[ae].disconnect(ue))}ud=null,hd=null,qu.reset();for(const ae in Ju)delete Ju[ae];ae.setRenderTarget(ed),wu=null,vu=null,_u=null,qt=null,td=null,gd.stop(),nt.isPresenting=!1,ae.setPixelRatio(ad),ae.setSize(rd.width,rd.height,!1),nt.dispatchEvent({type:"sessionend"})}function onInputSourcesChange(ae){for(let ue=0;ue<ae.removed.length;ue++){const nt=ae.removed[ue],ut=nd.indexOf(nt);ut>=0&&(nd[ut]=null,id[ut].disconnect(nt))}for(let ue=0;ue<ae.added.length;ue++){const nt=ae.added[ue];let ut=nd.indexOf(nt);if(-1===ut){for(let ae=0;ae<id.length;ae++){if(ae>=nd.length){nd.push(nt),ut=ae;break}if(null===nd[ae]){nd[ae]=nt,ut=ae;break}}if(-1===ut)break}const qt=id[ut];qt&&qt.connect(nt)}}this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(ae){let ue=id[ae];return void 0===ue&&(ue=new ut.R3r,id[ae]=ue),ue.getTargetRaySpace()},this.getControllerGrip=function(ae){let ue=id[ae];return void 0===ue&&(ue=new ut.R3r,id[ae]=ue),ue.getGripSpace()},this.getHand=function(ae){let ue=id[ae];return void 0===ue&&(ue=new ut.R3r,id[ae]=ue),ue.getHandSpace()},this.setFramebufferScaleFactor=function(ae){Yt=ae,!0===nt.isPresenting&&console.warn("THREE.WebXRManager: Cannot change framebuffer scale while presenting.")},this.setReferenceSpaceType=function(ae){ys=ae,!0===nt.isPresenting&&console.warn("THREE.WebXRManager: Cannot change reference space type while presenting.")},this.getReferenceSpace=function(){return lu||Xt},this.setReferenceSpace=function(ae){lu=ae},this.getBaseLayer=function(){return null!==vu?vu:wu},this.getBinding=function(){return _u},this.getFrame=function(){return Hu},this.getSession=function(){return qt},this.setSession=async function(uu){if(qt=uu,null!==qt){ed=ae.getRenderTarget(),qt.addEventListener("select",onSessionEvent),qt.addEventListener("selectstart",onSessionEvent),qt.addEventListener("selectend",onSessionEvent),qt.addEventListener("squeeze",onSessionEvent),qt.addEventListener("squeezestart",onSessionEvent),qt.addEventListener("squeezeend",onSessionEvent),qt.addEventListener("end",onSessionEnd),qt.addEventListener("inputsourceschange",onInputSourcesChange),!0!==_h.xrCompatible&&await ue.makeXRCompatible(),ad=ae.getPixelRatio(),ae.getSize(rd),"undefined"!==typeof XRWebGLBinding&&(_u=new XRWebGLBinding(qt,ue));if(null!==_u&&"createProjectionLayer"in XRWebGLBinding.prototype){let nt=null,Xt=null,ys=null;_h.depth&&(ys=_h.stencil?ue.DEPTH24_STENCIL8:ue.DEPTH_COMPONENT24,nt=_h.stencil?ut.dcC:ut.zdS,Xt=_h.stencil?ut.V3x:ut.bkx);const Ec={colorFormat:ue.RGBA8,depthFormat:ys,scaleFactor:Yt};vu=_u.createProjectionLayer(Ec),qt.updateRenderState({layers:[vu]}),ae.setPixelRatio(1),ae.setSize(vu.textureWidth,vu.textureHeight,!1),td=new ut.nWS(vu.textureWidth,vu.textureHeight,{format:ut.GWd,type:ut.OUM,depthTexture:new ut.VCu(vu.textureWidth,vu.textureHeight,Xt,void 0,void 0,void 0,void 0,void 0,void 0,nt),stencilBuffer:_h.stencil,colorSpace:ae.outputColorSpace,samples:_h.antialias?4:0,resolveDepthBuffer:!1===vu.ignoreDepthValues,resolveStencilBuffer:!1===vu.ignoreDepthValues})}else{const nt={antialias:_h.antialias,alpha:!0,depth:_h.depth,stencil:_h.stencil,framebufferScaleFactor:Yt};wu=new XRWebGLLayer(qt,ue,nt),qt.updateRenderState({baseLayer:wu}),ae.setPixelRatio(1),ae.setSize(wu.framebufferWidth,wu.framebufferHeight,!1),td=new ut.nWS(wu.framebufferWidth,wu.framebufferHeight,{format:ut.GWd,type:ut.OUM,colorSpace:ae.outputColorSpace,stencilBuffer:_h.stencil,resolveDepthBuffer:!1===wu.ignoreDepthValues,resolveStencilBuffer:!1===wu.ignoreDepthValues})}td.isXRRenderTarget=!0,this.setFoveation(Ec),lu=null,Xt=await qt.requestReferenceSpace(ys),gd.setContext(qt),gd.start(),nt.isPresenting=!0,nt.dispatchEvent({type:"sessionstart"})}},this.getEnvironmentBlendMode=function(){if(null!==qt)return qt.environmentBlendMode},this.getDepthTexture=function(){return qu.getDepthTexture()};const dd=new ut.Pq0,pd=new ut.Pq0;function updateCamera(ae,ue){null===ue?ae.matrixWorld.copy(ae.matrix):ae.matrixWorld.multiplyMatrices(ue.matrixWorld,ae.matrix),ae.matrixWorldInverse.copy(ae.matrixWorld).invert()}this.updateCamera=function(ae){if(null===qt)return;let ue=ae.near,nt=ae.far;null!==qu.texture&&(qu.depthNear>0&&(ue=qu.depthNear),qu.depthFar>0&&(nt=qu.depthFar)),cd.near=od.near=sd.near=ue,cd.far=od.far=sd.far=nt,ud===cd.near&&hd===cd.far||(qt.updateRenderState({depthNear:cd.near,depthFar:cd.far}),ud=cd.near,hd=cd.far),cd.layers.mask=6|ae.layers.mask,sd.layers.mask=3&cd.layers.mask,od.layers.mask=5&cd.layers.mask;const Yt=ae.parent,Xt=cd.cameras;updateCamera(cd,Yt);for(let ut=0;ut<Xt.length;ut++)updateCamera(Xt[ut],Yt);2===Xt.length?function(ae,ue,nt){dd.setFromMatrixPosition(ue.matrixWorld),pd.setFromMatrixPosition(nt.matrixWorld);const ut=dd.distanceTo(pd),qt=ue.projectionMatrix.elements,Yt=nt.projectionMatrix.elements,Xt=qt[14]/(qt[10]-1),ys=qt[14]/(qt[10]+1),Ec=(qt[9]+1)/qt[5],lu=(qt[9]-1)/qt[5],uu=(qt[8]-1)/qt[0],_u=(Yt[8]+1)/Yt[0],vu=Xt*uu,wu=Xt*_u,Hu=ut/(-uu+_u),qu=Hu*-uu;if(ue.matrixWorld.decompose(ae.position,ae.quaternion,ae.scale),ae.translateX(qu),ae.translateZ(Hu),ae.matrixWorld.compose(ae.position,ae.quaternion,ae.scale),ae.matrixWorldInverse.copy(ae.matrixWorld).invert(),-1===qt[10])ae.projectionMatrix.copy(ue.projectionMatrix),ae.projectionMatrixInverse.copy(ue.projectionMatrixInverse);else{const ue=Xt+Hu,nt=ys+Hu,qt=vu-qu,Yt=wu+(ut-qu),uu=Ec*ys/nt*ue,_u=lu*ys/nt*ue;ae.projectionMatrix.makePerspective(qt,Yt,uu,_u,ue,nt),ae.projectionMatrixInverse.copy(ae.projectionMatrix).invert()}}(cd,sd,od):cd.projectionMatrix.copy(sd.projectionMatrix),function(ae,ue,nt){null===nt?ae.matrix.copy(ue.matrixWorld):(ae.matrix.copy(nt.matrixWorld),ae.matrix.invert(),ae.matrix.multiply(ue.matrixWorld));ae.matrix.decompose(ae.position,ae.quaternion,ae.scale),ae.updateMatrixWorld(!0),ae.projectionMatrix.copy(ue.projectionMatrix),ae.projectionMatrixInverse.copy(ue.projectionMatrixInverse),ae.isPerspectiveCamera&&(ae.fov=2*ut.a55*Math.atan(1/ae.projectionMatrix.elements[5]),ae.zoom=1)}(ae,cd,Yt)},this.getCamera=function(){return cd},this.getFoveation=function(){if(null!==vu||null!==wu)return Ec},this.setFoveation=function(ae){Ec=ae,null!==vu&&(vu.fixedFoveation=ae),null!==wu&&void 0!==wu.fixedFoveation&&(wu.fixedFoveation=ae)},this.hasDepthSensing=function(){return null!==qu.texture},this.getDepthSensingMesh=function(){return qu.getMesh(cd)},this.getCameraTexture=function(ae){return Ju[ae]};let md=null;const gd=new WebGLAnimation;gd.setAnimationLoop((function(ue,Yt){if(uu=Yt.getViewerPose(lu||Xt),Hu=Yt,null!==uu){const ue=uu.views;null!==wu&&(ae.setRenderTargetFramebuffer(td,wu.framebuffer),ae.setRenderTarget(td));let nt=!1;ue.length!==cd.cameras.length&&(cd.cameras.length=0,nt=!0);for(let qt=0;qt<ue.length;qt++){const Yt=ue[qt];let Xt=null;if(null!==wu)Xt=wu.getViewport(Yt);else{const ue=_u.getViewSubImage(vu,Yt);Xt=ue.viewport,0===qt&&(ae.setRenderTargetTextures(td,ue.colorTexture,ue.depthStencilTexture),ae.setRenderTarget(td))}let ys=ld[qt];void 0===ys&&(ys=new ut.ubm,ys.layers.enable(qt),ys.viewport=new ut.IUQ,ld[qt]=ys),ys.matrix.fromArray(Yt.transform.matrix),ys.matrix.decompose(ys.position,ys.quaternion,ys.scale),ys.projectionMatrix.fromArray(Yt.projectionMatrix),ys.projectionMatrixInverse.copy(ys.projectionMatrix).invert(),ys.viewport.set(Xt.x,Xt.y,Xt.width,Xt.height),0===qt&&(cd.matrix.copy(ys.matrix),cd.matrix.decompose(cd.position,cd.quaternion,cd.scale)),!0===nt&&cd.cameras.push(ys)}const Yt=qt.enabledFeatures;if(Yt&&Yt.includes("depth-sensing")&&"gpu-optimized"==qt.depthUsage&&_u){const ae=_u.getDepthInformation(ue[0]);ae&&ae.isValid&&ae.texture&&qu.init(ae,qt.renderState)}if(Yt&&Yt.includes("camera-access")&&(ae.state.unbindTexture(),_u))for(let ae=0;ae<ue.length;ae++){const nt=ue[ae].camera;if(nt){let ae=Ju[nt];ae||(ae=new ExternalTexture,Ju[nt]=ae);const ue=_u.getCameraImage(nt);ae.sourceTexture=ue}}}for(let ae=0;ae<id.length;ae++){const ue=nd[ae],nt=id[ae];null!==ue&&void 0!==nt&&nt.update(ue,Yt,lu||Xt)}md&&md(ue,Yt),Yt.detectedPlanes&&nt.dispatchEvent({type:"planesdetected",data:Yt}),Hu=null})),this.setAnimationLoop=function(ae){md=ae},this.dispose=function(){}}}const Ed=new ut.O9p,Md=new ut.kn4;function WebGLMaterials(ae,ue){function refreshTransformUniform(ae,ue){!0===ae.matrixAutoUpdate&&ae.updateMatrix(),ue.value.copy(ae.matrix)}function refreshUniformsCommon(ae,nt){ae.opacity.value=nt.opacity,nt.color&&ae.diffuse.value.copy(nt.color),nt.emissive&&ae.emissive.value.copy(nt.emissive).multiplyScalar(nt.emissiveIntensity),nt.map&&(ae.map.value=nt.map,refreshTransformUniform(nt.map,ae.mapTransform)),nt.alphaMap&&(ae.alphaMap.value=nt.alphaMap,refreshTransformUniform(nt.alphaMap,ae.alphaMapTransform)),nt.bumpMap&&(ae.bumpMap.value=nt.bumpMap,refreshTransformUniform(nt.bumpMap,ae.bumpMapTransform),ae.bumpScale.value=nt.bumpScale,nt.side===ut.hsX&&(ae.bumpScale.value*=-1)),nt.normalMap&&(ae.normalMap.value=nt.normalMap,refreshTransformUniform(nt.normalMap,ae.normalMapTransform),ae.normalScale.value.copy(nt.normalScale),nt.side===ut.hsX&&ae.normalScale.value.negate()),nt.displacementMap&&(ae.displacementMap.value=nt.displacementMap,refreshTransformUniform(nt.displacementMap,ae.displacementMapTransform),ae.displacementScale.value=nt.displacementScale,ae.displacementBias.value=nt.displacementBias),nt.emissiveMap&&(ae.emissiveMap.value=nt.emissiveMap,refreshTransformUniform(nt.emissiveMap,ae.emissiveMapTransform)),nt.specularMap&&(ae.specularMap.value=nt.specularMap,refreshTransformUniform(nt.specularMap,ae.specularMapTransform)),nt.alphaTest>0&&(ae.alphaTest.value=nt.alphaTest);const qt=ue.get(nt),Yt=qt.envMap,Xt=qt.envMapRotation;Yt&&(ae.envMap.value=Yt,Ed.copy(Xt),Ed.x*=-1,Ed.y*=-1,Ed.z*=-1,Yt.isCubeTexture&&!1===Yt.isRenderTargetTexture&&(Ed.y*=-1,Ed.z*=-1),ae.envMapRotation.value.setFromMatrix4(Md.makeRotationFromEuler(Ed)),ae.flipEnvMap.value=Yt.isCubeTexture&&!1===Yt.isRenderTargetTexture?-1:1,ae.reflectivity.value=nt.reflectivity,ae.ior.value=nt.ior,ae.refractionRatio.value=nt.refractionRatio),nt.lightMap&&(ae.lightMap.value=nt.lightMap,ae.lightMapIntensity.value=nt.lightMapIntensity,refreshTransformUniform(nt.lightMap,ae.lightMapTransform)),nt.aoMap&&(ae.aoMap.value=nt.aoMap,ae.aoMapIntensity.value=nt.aoMapIntensity,refreshTransformUniform(nt.aoMap,ae.aoMapTransform))}return{refreshFogUniforms:function(ue,nt){nt.color.getRGB(ue.fogColor.value,(0,ut._Ut)(ae)),nt.isFog?(ue.fogNear.value=nt.near,ue.fogFar.value=nt.far):nt.isFogExp2&&(ue.fogDensity.value=nt.density)},refreshMaterialUniforms:function(ae,nt,qt,Yt,Xt){nt.isMeshBasicMaterial||nt.isMeshLambertMaterial?refreshUniformsCommon(ae,nt):nt.isMeshToonMaterial?(refreshUniformsCommon(ae,nt),function(ae,ue){ue.gradientMap&&(ae.gradientMap.value=ue.gradientMap)}(ae,nt)):nt.isMeshPhongMaterial?(refreshUniformsCommon(ae,nt),function(ae,ue){ae.specular.value.copy(ue.specular),ae.shininess.value=Math.max(ue.shininess,1e-4)}(ae,nt)):nt.isMeshStandardMaterial?(refreshUniformsCommon(ae,nt),function(ae,ue){ae.metalness.value=ue.metalness,ue.metalnessMap&&(ae.metalnessMap.value=ue.metalnessMap,refreshTransformUniform(ue.metalnessMap,ae.metalnessMapTransform));ae.roughness.value=ue.roughness,ue.roughnessMap&&(ae.roughnessMap.value=ue.roughnessMap,refreshTransformUniform(ue.roughnessMap,ae.roughnessMapTransform));ue.envMap&&(ae.envMapIntensity.value=ue.envMapIntensity)}(ae,nt),nt.isMeshPhysicalMaterial&&function(ae,ue,nt){ae.ior.value=ue.ior,ue.sheen>0&&(ae.sheenColor.value.copy(ue.sheenColor).multiplyScalar(ue.sheen),ae.sheenRoughness.value=ue.sheenRoughness,ue.sheenColorMap&&(ae.sheenColorMap.value=ue.sheenColorMap,refreshTransformUniform(ue.sheenColorMap,ae.sheenColorMapTransform)),ue.sheenRoughnessMap&&(ae.sheenRoughnessMap.value=ue.sheenRoughnessMap,refreshTransformUniform(ue.sheenRoughnessMap,ae.sheenRoughnessMapTransform)));ue.clearcoat>0&&(ae.clearcoat.value=ue.clearcoat,ae.clearcoatRoughness.value=ue.clearcoatRoughness,ue.clearcoatMap&&(ae.clearcoatMap.value=ue.clearcoatMap,refreshTransformUniform(ue.clearcoatMap,ae.clearcoatMapTransform)),ue.clearcoatRoughnessMap&&(ae.clearcoatRoughnessMap.value=ue.clearcoatRoughnessMap,refreshTransformUniform(ue.clearcoatRoughnessMap,ae.clearcoatRoughnessMapTransform)),ue.clearcoatNormalMap&&(ae.clearcoatNormalMap.value=ue.clearcoatNormalMap,refreshTransformUniform(ue.clearcoatNormalMap,ae.clearcoatNormalMapTransform),ae.clearcoatNormalScale.value.copy(ue.clearcoatNormalScale),ue.side===ut.hsX&&ae.clearcoatNormalScale.value.negate()));ue.dispersion>0&&(ae.dispersion.value=ue.dispersion);ue.iridescence>0&&(ae.iridescence.value=ue.iridescence,ae.iridescenceIOR.value=ue.iridescenceIOR,ae.iridescenceThicknessMinimum.value=ue.iridescenceThicknessRange[0],ae.iridescenceThicknessMaximum.value=ue.iridescenceThicknessRange[1],ue.iridescenceMap&&(ae.iridescenceMap.value=ue.iridescenceMap,refreshTransformUniform(ue.iridescenceMap,ae.iridescenceMapTransform)),ue.iridescenceThicknessMap&&(ae.iridescenceThicknessMap.value=ue.iridescenceThicknessMap,refreshTransformUniform(ue.iridescenceThicknessMap,ae.iridescenceThicknessMapTransform)));ue.transmission>0&&(ae.transmission.value=ue.transmission,ae.transmissionSamplerMap.value=nt.texture,ae.transmissionSamplerSize.value.set(nt.width,nt.height),ue.transmissionMap&&(ae.transmissionMap.value=ue.transmissionMap,refreshTransformUniform(ue.transmissionMap,ae.transmissionMapTransform)),ae.thickness.value=ue.thickness,ue.thicknessMap&&(ae.thicknessMap.value=ue.thicknessMap,refreshTransformUniform(ue.thicknessMap,ae.thicknessMapTransform)),ae.attenuationDistance.value=ue.attenuationDistance,ae.attenuationColor.value.copy(ue.attenuationColor));ue.anisotropy>0&&(ae.anisotropyVector.value.set(ue.anisotropy*Math.cos(ue.anisotropyRotation),ue.anisotropy*Math.sin(ue.anisotropyRotation)),ue.anisotropyMap&&(ae.anisotropyMap.value=ue.anisotropyMap,refreshTransformUniform(ue.anisotropyMap,ae.anisotropyMapTransform)));ae.specularIntensity.value=ue.specularIntensity,ae.specularColor.value.copy(ue.specularColor),ue.specularColorMap&&(ae.specularColorMap.value=ue.specularColorMap,refreshTransformUniform(ue.specularColorMap,ae.specularColorMapTransform));ue.specularIntensityMap&&(ae.specularIntensityMap.value=ue.specularIntensityMap,refreshTransformUniform(ue.specularIntensityMap,ae.specularIntensityMapTransform))}(ae,nt,Xt)):nt.isMeshMatcapMaterial?(refreshUniformsCommon(ae,nt),function(ae,ue){ue.matcap&&(ae.matcap.value=ue.matcap)}(ae,nt)):nt.isMeshDepthMaterial?refreshUniformsCommon(ae,nt):nt.isMeshDistanceMaterial?(refreshUniformsCommon(ae,nt),function(ae,nt){const ut=ue.get(nt).light;ae.referencePosition.value.setFromMatrixPosition(ut.matrixWorld),ae.nearDistance.value=ut.shadow.camera.near,ae.farDistance.value=ut.shadow.camera.far}(ae,nt)):nt.isMeshNormalMaterial?refreshUniformsCommon(ae,nt):nt.isLineBasicMaterial?(function(ae,ue){ae.diffuse.value.copy(ue.color),ae.opacity.value=ue.opacity,ue.map&&(ae.map.value=ue.map,refreshTransformUniform(ue.map,ae.mapTransform))}(ae,nt),nt.isLineDashedMaterial&&function(ae,ue){ae.dashSize.value=ue.dashSize,ae.totalSize.value=ue.dashSize+ue.gapSize,ae.scale.value=ue.scale}(ae,nt)):nt.isPointsMaterial?function(ae,ue,nt,ut){ae.diffuse.value.copy(ue.color),ae.opacity.value=ue.opacity,ae.size.value=ue.size*nt,ae.scale.value=.5*ut,ue.map&&(ae.map.value=ue.map,refreshTransformUniform(ue.map,ae.uvTransform));ue.alphaMap&&(ae.alphaMap.value=ue.alphaMap,refreshTransformUniform(ue.alphaMap,ae.alphaMapTransform));ue.alphaTest>0&&(ae.alphaTest.value=ue.alphaTest)}(ae,nt,qt,Yt):nt.isSpriteMaterial?function(ae,ue){ae.diffuse.value.copy(ue.color),ae.opacity.value=ue.opacity,ae.rotation.value=ue.rotation,ue.map&&(ae.map.value=ue.map,refreshTransformUniform(ue.map,ae.mapTransform));ue.alphaMap&&(ae.alphaMap.value=ue.alphaMap,refreshTransformUniform(ue.alphaMap,ae.alphaMapTransform));ue.alphaTest>0&&(ae.alphaTest.value=ue.alphaTest)}(ae,nt):nt.isShadowMaterial?(ae.color.value.copy(nt.color),ae.opacity.value=nt.opacity):nt.isShaderMaterial&&(nt.uniformsNeedUpdate=!1)}}}function WebGLUniformsGroups(ae,ue,nt,ut){let qt={},Yt={},Xt=[];const ys=ae.getParameter(ae.MAX_UNIFORM_BUFFER_BINDINGS);function hasUniformChanged(ae,ue,nt,ut){const qt=ae.value,Yt=ue+"_"+nt;if(void 0===ut[Yt])return ut[Yt]="number"===typeof qt||"boolean"===typeof qt?qt:qt.clone(),!0;{const ae=ut[Yt];if("number"===typeof qt||"boolean"===typeof qt){if(ae!==qt)return ut[Yt]=qt,!0}else if(!1===ae.equals(qt))return ae.copy(qt),!0}return!1}function getUniformSize(ae){const ue={boundary:0,storage:0};return"number"===typeof ae||"boolean"===typeof ae?(ue.boundary=4,ue.storage=4):ae.isVector2?(ue.boundary=8,ue.storage=8):ae.isVector3||ae.isColor?(ue.boundary=16,ue.storage=12):ae.isVector4?(ue.boundary=16,ue.storage=16):ae.isMatrix3?(ue.boundary=48,ue.storage=48):ae.isMatrix4?(ue.boundary=64,ue.storage=64):ae.isTexture?console.warn("THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group."):console.warn("THREE.WebGLRenderer: Unsupported uniform value type.",ae),ue}function onUniformsGroupsDispose(ue){const nt=ue.target;nt.removeEventListener("dispose",onUniformsGroupsDispose);const ut=Xt.indexOf(nt.__bindingPointIndex);Xt.splice(ut,1),ae.deleteBuffer(qt[nt.id]),delete qt[nt.id],delete Yt[nt.id]}return{bind:function(ae,ue){const nt=ue.program;ut.uniformBlockBinding(ae,nt)},update:function(nt,Ec){let lu=qt[nt.id];void 0===lu&&(!function(ae){const ue=ae.uniforms;let nt=0;const ut=16;for(let Yt=0,Xt=ue.length;Yt<Xt;Yt++){const ae=Array.isArray(ue[Yt])?ue[Yt]:[ue[Yt]];for(let ue=0,qt=ae.length;ue<qt;ue++){const qt=ae[ue],Yt=Array.isArray(qt.value)?qt.value:[qt.value];for(let ae=0,ue=Yt.length;ae<ue;ae++){const ue=getUniformSize(Yt[ae]),Xt=nt%ut,ys=Xt%ue.boundary,Ec=Xt+ys;nt+=ys,0!==Ec&&ut-Ec<ue.storage&&(nt+=ut-Ec),qt.__data=new Float32Array(ue.storage/Float32Array.BYTES_PER_ELEMENT),qt.__offset=nt,nt+=ue.storage}}}const qt=nt%ut;qt>0&&(nt+=ut-qt);ae.__size=nt,ae.__cache={}}(nt),lu=function(ue){const nt=function(){for(let ae=0;ae<ys;ae++)if(-1===Xt.indexOf(ae))return Xt.push(ae),ae;return console.error("THREE.WebGLRenderer: Maximum number of simultaneously usable uniforms groups reached."),0}();ue.__bindingPointIndex=nt;const ut=ae.createBuffer(),qt=ue.__size,Yt=ue.usage;return ae.bindBuffer(ae.UNIFORM_BUFFER,ut),ae.bufferData(ae.UNIFORM_BUFFER,qt,Yt),ae.bindBuffer(ae.UNIFORM_BUFFER,null),ae.bindBufferBase(ae.UNIFORM_BUFFER,nt,ut),ut}(nt),qt[nt.id]=lu,nt.addEventListener("dispose",onUniformsGroupsDispose));const uu=Ec.program;ut.updateUBOMapping(nt,uu);const _u=ue.render.frame;Yt[nt.id]!==_u&&(!function(ue){const nt=qt[ue.id],ut=ue.uniforms,Yt=ue.__cache;ae.bindBuffer(ae.UNIFORM_BUFFER,nt);for(let qt=0,Xt=ut.length;qt<Xt;qt++){const ue=Array.isArray(ut[qt])?ut[qt]:[ut[qt]];for(let nt=0,ut=ue.length;nt<ut;nt++){const ut=ue[nt];if(!0===hasUniformChanged(ut,qt,nt,Yt)){const ue=ut.__offset,nt=Array.isArray(ut.value)?ut.value:[ut.value];let qt=0;for(let Yt=0;Yt<nt.length;Yt++){const Xt=nt[Yt],ys=getUniformSize(Xt);"number"===typeof Xt||"boolean"===typeof Xt?(ut.__data[0]=Xt,ae.bufferSubData(ae.UNIFORM_BUFFER,ue+qt,ut.__data)):Xt.isMatrix3?(ut.__data[0]=Xt.elements[0],ut.__data[1]=Xt.elements[1],ut.__data[2]=Xt.elements[2],ut.__data[3]=0,ut.__data[4]=Xt.elements[3],ut.__data[5]=Xt.elements[4],ut.__data[6]=Xt.elements[5],ut.__data[7]=0,ut.__data[8]=Xt.elements[6],ut.__data[9]=Xt.elements[7],ut.__data[10]=Xt.elements[8],ut.__data[11]=0):(Xt.toArray(ut.__data,qt),qt+=ys.storage/Float32Array.BYTES_PER_ELEMENT)}ae.bufferSubData(ae.UNIFORM_BUFFER,ue,ut.__data)}}}ae.bindBuffer(ae.UNIFORM_BUFFER,null)}(nt),Yt[nt.id]=_u)},dispose:function(){for(const ue in qt)ae.deleteBuffer(qt[ue]);Xt=[],qt={},Yt={}}}}class WebGLRenderer{constructor(ae){void 0===ae&&(ae={});const{canvas:ue=(0,ut.lPF)(),context:nt=null,depth:qt=!0,stencil:Yt=!1,alpha:Xt=!1,antialias:ys=!1,premultipliedAlpha:Ec=!0,preserveDrawingBuffer:lu=!1,powerPreference:uu="default",failIfMajorPerformanceCaveat:_u=!1,reversedDepthBuffer:vu=!1}=ae;let wu;if(this.isWebGLRenderer=!0,null!==nt){if("undefined"!==typeof WebGLRenderingContext&&nt instanceof WebGLRenderingContext)throw new Error("THREE.WebGLRenderer: WebGL 1 is not supported since r163.");wu=nt.getContextAttributes().alpha}else wu=Xt;const Hu=new Uint32Array(4),qu=new Int32Array(4);let Ju=null,_h=null;const ed=[],td=[];this.domElement=ue,this.debug={checkShaderErrors:!0,onShaderError:null},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.toneMapping=ut.y_p,this.toneMappingExposure=1,this.transmissionResolutionScale=1;const id=this;let nd=!1;this._outputColorSpace=ut.er$;let rd=0,ad=0,sd=null,od=-1,ld=null;const cd=new ut.IUQ,ud=new ut.IUQ;let hd=null;const dd=new ut.Q1f(0);let pd=0,md=ue.width,gd=ue.height,fd=1,Ad=null,yd=null;const _d=new ut.IUQ(0,0,md,gd),vd=new ut.IUQ(0,0,md,gd);let xd=!1;const bd=new ut.PPD;let wd=!1,Ed=!1;const Md=new ut.kn4,Sd=new ut.Pq0,Td=new ut.IUQ,kd={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};let Cd=!1;function getTargetPixelRatio(){return null===sd?fd:1}let Id,Dd,Ld,Pd,zd,Nd,Rd,Od,Bd,Fd,jd,Ud,Vd,Gd,Hd,Wd,qd,Zd,Yd,Qd,Kd,Xd,Jd,$d,Fp=nt;function getContext(ae,nt){return ue.getContext(ae,nt)}try{const ae={alpha:!0,depth:qt,stencil:Yt,antialias:ys,premultipliedAlpha:Ec,preserveDrawingBuffer:lu,powerPreference:uu,failIfMajorPerformanceCaveat:_u};if("setAttribute"in ue&&ue.setAttribute("data-engine",`three.js r${ut.sPf}`),ue.addEventListener("webglcontextlost",onContextLost,!1),ue.addEventListener("webglcontextrestored",onContextRestore,!1),ue.addEventListener("webglcontextcreationerror",onContextCreationError,!1),null===Fp){const ue="webgl2";if(Fp=getContext(ue,ae),null===Fp)throw getContext(ue)?new Error("Error creating WebGL context with your selected attributes."):new Error("Error creating WebGL context.")}}catch(Kp){throw console.error("THREE.WebGLRenderer: "+Kp.message),Kp}function initGLContext(){Id=new WebGLExtensions(Fp),Id.init(),Xd=new WebGLUtils(Fp,Id),Dd=new WebGLCapabilities(Fp,Id,ae,Xd),Ld=new WebGLState(Fp,Id),Dd.reversedDepthBuffer&&vu&&Ld.buffers.depth.setReversed(!0),Pd=new WebGLInfo(Fp),zd=new WebGLProperties,Nd=new WebGLTextures(Fp,Id,Ld,zd,Dd,Xd,Pd),Rd=new WebGLCubeMaps(id),Od=new WebGLCubeUVMaps(id),Bd=new WebGLAttributes(Fp),Jd=new WebGLBindingStates(Fp,Bd),Fd=new WebGLGeometries(Fp,Bd,Pd,Jd),jd=new WebGLObjects(Fp,Fd,Bd,Pd),Yd=new WebGLMorphtargets(Fp,Dd,Nd),Wd=new WebGLClipping(zd),Ud=new WebGLPrograms(id,Rd,Od,Id,Dd,Jd,Wd),Vd=new WebGLMaterials(id,zd),Gd=new WebGLRenderLists,Hd=new WebGLRenderStates(Id),Zd=new WebGLBackground(id,Rd,Od,Ld,jd,wu,Ec),qd=new WebGLShadowMap(id,jd,Dd),$d=new WebGLUniformsGroups(Fp,Pd,Dd,Ld),Qd=new WebGLBufferRenderer(Fp,Id,Pd),Kd=new WebGLIndexedBufferRenderer(Fp,Id,Pd),Pd.programs=Ud.programs,id.capabilities=Dd,id.extensions=Id,id.properties=zd,id.renderLists=Gd,id.shadowMap=qd,id.state=Ld,id.info=Pd}initGLContext();const Gp=new WebXRManager(id,Fp);function onContextLost(ae){ae.preventDefault(),console.log("THREE.WebGLRenderer: Context Lost."),nd=!0}function onContextRestore(){console.log("THREE.WebGLRenderer: Context Restored."),nd=!1;const ae=Pd.autoReset,ue=qd.enabled,nt=qd.autoUpdate,ut=qd.needsUpdate,qt=qd.type;initGLContext(),Pd.autoReset=ae,qd.enabled=ue,qd.autoUpdate=nt,qd.needsUpdate=ut,qd.type=qt}function onContextCreationError(ae){console.error("THREE.WebGLRenderer: A WebGL context could not be created. Reason: ",ae.statusMessage)}function onMaterialDispose(ae){const ue=ae.target;ue.removeEventListener("dispose",onMaterialDispose),function(ae){(function(ae){const ue=zd.get(ae).programs;void 0!==ue&&(ue.forEach((function(ae){Ud.releaseProgram(ae)})),ae.isShaderMaterial&&Ud.releaseShaderCache(ae))})(ae),zd.remove(ae)}(ue)}function prepareMaterial(ae,ue,nt){!0===ae.transparent&&ae.side===ut.$EB&&!1===ae.forceSinglePass?(ae.side=ut.hsX,ae.needsUpdate=!0,getProgram(ae,ue,nt),ae.side=ut.hB5,ae.needsUpdate=!0,getProgram(ae,ue,nt),ae.side=ut.$EB):getProgram(ae,ue,nt)}this.xr=Gp,this.getContext=function(){return Fp},this.getContextAttributes=function(){return Fp.getContextAttributes()},this.forceContextLoss=function(){const ae=Id.get("WEBGL_lose_context");ae&&ae.loseContext()},this.forceContextRestore=function(){const ae=Id.get("WEBGL_lose_context");ae&&ae.restoreContext()},this.getPixelRatio=function(){return fd},this.setPixelRatio=function(ae){void 0!==ae&&(fd=ae,this.setSize(md,gd,!1))},this.getSize=function(ae){return ae.set(md,gd)},this.setSize=function(ae,nt,ut){void 0===ut&&(ut=!0),Gp.isPresenting?console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting."):(md=ae,gd=nt,ue.width=Math.floor(ae*fd),ue.height=Math.floor(nt*fd),!0===ut&&(ue.style.width=ae+"px",ue.style.height=nt+"px"),this.setViewport(0,0,ae,nt))},this.getDrawingBufferSize=function(ae){return ae.set(md*fd,gd*fd).floor()},this.setDrawingBufferSize=function(ae,nt,ut){md=ae,gd=nt,fd=ut,ue.width=Math.floor(ae*ut),ue.height=Math.floor(nt*ut),this.setViewport(0,0,ae,nt)},this.getCurrentViewport=function(ae){return ae.copy(cd)},this.getViewport=function(ae){return ae.copy(_d)},this.setViewport=function(ae,ue,nt,ut){ae.isVector4?_d.set(ae.x,ae.y,ae.z,ae.w):_d.set(ae,ue,nt,ut),Ld.viewport(cd.copy(_d).multiplyScalar(fd).round())},this.getScissor=function(ae){return ae.copy(vd)},this.setScissor=function(ae,ue,nt,ut){ae.isVector4?vd.set(ae.x,ae.y,ae.z,ae.w):vd.set(ae,ue,nt,ut),Ld.scissor(ud.copy(vd).multiplyScalar(fd).round())},this.getScissorTest=function(){return xd},this.setScissorTest=function(ae){Ld.setScissorTest(xd=ae)},this.setOpaqueSort=function(ae){Ad=ae},this.setTransparentSort=function(ae){yd=ae},this.getClearColor=function(ae){return ae.copy(Zd.getClearColor())},this.setClearColor=function(){Zd.setClearColor(...arguments)},this.getClearAlpha=function(){return Zd.getClearAlpha()},this.setClearAlpha=function(){Zd.setClearAlpha(...arguments)},this.clear=function(ae,ue,nt){void 0===ae&&(ae=!0),void 0===ue&&(ue=!0),void 0===nt&&(nt=!0);let qt=0;if(ae){let ae=!1;if(null!==sd){const ue=sd.texture.format;ae=ue===ut.c90||ue===ut.TkQ||ue===ut.ZQM}if(ae){const ae=sd.texture.type,ue=ae===ut.OUM||ae===ut.bkx||ae===ut.cHt||ae===ut.V3x||ae===ut.Wew||ae===ut.gJ2,nt=Zd.getClearColor(),qt=Zd.getClearAlpha(),Yt=nt.r,Xt=nt.g,ys=nt.b;ue?(Hu[0]=Yt,Hu[1]=Xt,Hu[2]=ys,Hu[3]=qt,Fp.clearBufferuiv(Fp.COLOR,0,Hu)):(qu[0]=Yt,qu[1]=Xt,qu[2]=ys,qu[3]=qt,Fp.clearBufferiv(Fp.COLOR,0,qu))}else qt|=Fp.COLOR_BUFFER_BIT}ue&&(qt|=Fp.DEPTH_BUFFER_BIT),nt&&(qt|=Fp.STENCIL_BUFFER_BIT,this.state.buffers.stencil.setMask(4294967295)),Fp.clear(qt)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.dispose=function(){ue.removeEventListener("webglcontextlost",onContextLost,!1),ue.removeEventListener("webglcontextrestored",onContextRestore,!1),ue.removeEventListener("webglcontextcreationerror",onContextCreationError,!1),Zd.dispose(),Gd.dispose(),Hd.dispose(),zd.dispose(),Rd.dispose(),Od.dispose(),jd.dispose(),Jd.dispose(),$d.dispose(),Ud.dispose(),Gp.dispose(),Gp.removeEventListener("sessionstart",onXRSessionStart),Gp.removeEventListener("sessionend",onXRSessionEnd),Wp.stop()},this.renderBufferDirect=function(ae,ue,nt,qt,Yt,Xt){null===ue&&(ue=kd);const ys=Yt.isMesh&&Yt.matrixWorld.determinant()<0,Ec=function(ae,ue,nt,qt,Yt){!0!==ue.isScene&&(ue=kd);Nd.resetTextureUnits();const Xt=ue.fog,ys=qt.isMeshStandardMaterial?ue.environment:null,Ec=null===sd?id.outputColorSpace:!0===sd.isXRRenderTarget?sd.texture.colorSpace:ut.Zr2,lu=(qt.isMeshStandardMaterial?Od:Rd).get(qt.envMap||ys),uu=!0===qt.vertexColors&&!!nt.attributes.color&&4===nt.attributes.color.itemSize,_u=!!nt.attributes.tangent&&(!!qt.normalMap||qt.anisotropy>0),vu=!!nt.morphAttributes.position,wu=!!nt.morphAttributes.normal,Hu=!!nt.morphAttributes.color;let qu=ut.y_p;qt.toneMapped&&(null!==sd&&!0!==sd.isXRRenderTarget||(qu=id.toneMapping));const Ju=nt.morphAttributes.position||nt.morphAttributes.normal||nt.morphAttributes.color,ed=void 0!==Ju?Ju.length:0,td=zd.get(qt),nd=_h.state.lights;if(!0===wd&&(!0===Ed||ae!==ld)){const ue=ae===ld&&qt.id===od;Wd.setState(qt,ae,ue)}let rd=!1;qt.version===td.__version?td.needsLights&&td.lightsStateVersion!==nd.state.version||td.outputColorSpace!==Ec||Yt.isBatchedMesh&&!1===td.batching?rd=!0:Yt.isBatchedMesh||!0!==td.batching?Yt.isBatchedMesh&&!0===td.batchingColor&&null===Yt.colorTexture||Yt.isBatchedMesh&&!1===td.batchingColor&&null!==Yt.colorTexture||Yt.isInstancedMesh&&!1===td.instancing?rd=!0:Yt.isInstancedMesh||!0!==td.instancing?Yt.isSkinnedMesh&&!1===td.skinning?rd=!0:Yt.isSkinnedMesh||!0!==td.skinning?Yt.isInstancedMesh&&!0===td.instancingColor&&null===Yt.instanceColor||Yt.isInstancedMesh&&!1===td.instancingColor&&null!==Yt.instanceColor||Yt.isInstancedMesh&&!0===td.instancingMorph&&null===Yt.morphTexture||Yt.isInstancedMesh&&!1===td.instancingMorph&&null!==Yt.morphTexture||td.envMap!==lu||!0===qt.fog&&td.fog!==Xt?rd=!0:void 0===td.numClippingPlanes||td.numClippingPlanes===Wd.numPlanes&&td.numIntersection===Wd.numIntersection?(td.vertexAlphas!==uu||td.vertexTangents!==_u||td.morphTargets!==vu||td.morphNormals!==wu||td.morphColors!==Hu||td.toneMapping!==qu||td.morphTargetsCount!==ed)&&(rd=!0):rd=!0:rd=!0:rd=!0:rd=!0:(rd=!0,td.__version=qt.version);let ad=td.currentProgram;!0===rd&&(ad=getProgram(qt,ue,Yt));let cd=!1,ud=!1,hd=!1;const dd=ad.getUniforms(),pd=td.uniforms;Ld.useProgram(ad.program)&&(cd=!0,ud=!0,hd=!0);qt.id!==od&&(od=qt.id,ud=!0);if(cd||ld!==ae){Ld.buffers.depth.getReversed()&&!0!==ae.reversedDepth&&(ae._reversedDepth=!0,ae.updateProjectionMatrix()),dd.setValue(Fp,"projectionMatrix",ae.projectionMatrix),dd.setValue(Fp,"viewMatrix",ae.matrixWorldInverse);const ue=dd.map.cameraPosition;void 0!==ue&&ue.setValue(Fp,Sd.setFromMatrixPosition(ae.matrixWorld)),Dd.logarithmicDepthBuffer&&dd.setValue(Fp,"logDepthBufFC",2/(Math.log(ae.far+1)/Math.LN2)),(qt.isMeshPhongMaterial||qt.isMeshToonMaterial||qt.isMeshLambertMaterial||qt.isMeshBasicMaterial||qt.isMeshStandardMaterial||qt.isShaderMaterial)&&dd.setValue(Fp,"isOrthographic",!0===ae.isOrthographicCamera),ld!==ae&&(ld=ae,ud=!0,hd=!0)}if(Yt.isSkinnedMesh){dd.setOptional(Fp,Yt,"bindMatrix"),dd.setOptional(Fp,Yt,"bindMatrixInverse");const ae=Yt.skeleton;ae&&(null===ae.boneTexture&&ae.computeBoneTexture(),dd.setValue(Fp,"boneTexture",ae.boneTexture,Nd))}Yt.isBatchedMesh&&(dd.setOptional(Fp,Yt,"batchingTexture"),dd.setValue(Fp,"batchingTexture",Yt._matricesTexture,Nd),dd.setOptional(Fp,Yt,"batchingIdTexture"),dd.setValue(Fp,"batchingIdTexture",Yt._indirectTexture,Nd),dd.setOptional(Fp,Yt,"batchingColorTexture"),null!==Yt._colorsTexture&&dd.setValue(Fp,"batchingColorTexture",Yt._colorsTexture,Nd));const md=nt.morphAttributes;void 0===md.position&&void 0===md.normal&&void 0===md.color||Yd.update(Yt,nt,ad);(ud||td.receiveShadow!==Yt.receiveShadow)&&(td.receiveShadow=Yt.receiveShadow,dd.setValue(Fp,"receiveShadow",Yt.receiveShadow));qt.isMeshGouraudMaterial&&null!==qt.envMap&&(pd.envMap.value=lu,pd.flipEnvMap.value=lu.isCubeTexture&&!1===lu.isRenderTargetTexture?-1:1);qt.isMeshStandardMaterial&&null===qt.envMap&&null!==ue.environment&&(pd.envMapIntensity.value=ue.environmentIntensity);ud&&(dd.setValue(Fp,"toneMappingExposure",id.toneMappingExposure),td.needsLights&&(yd=hd,(Ad=pd).ambientLightColor.needsUpdate=yd,Ad.lightProbe.needsUpdate=yd,Ad.directionalLights.needsUpdate=yd,Ad.directionalLightShadows.needsUpdate=yd,Ad.pointLights.needsUpdate=yd,Ad.pointLightShadows.needsUpdate=yd,Ad.spotLights.needsUpdate=yd,Ad.spotLightShadows.needsUpdate=yd,Ad.rectAreaLights.needsUpdate=yd,Ad.hemisphereLights.needsUpdate=yd),Xt&&!0===qt.fog&&Vd.refreshFogUniforms(pd,Xt),Vd.refreshMaterialUniforms(pd,qt,fd,gd,_h.state.transmissionRenderTarget[ae.id]),WebGLUniforms.upload(Fp,getUniformList(td),pd,Nd));var Ad,yd;qt.isShaderMaterial&&!0===qt.uniformsNeedUpdate&&(WebGLUniforms.upload(Fp,getUniformList(td),pd,Nd),qt.uniformsNeedUpdate=!1);qt.isSpriteMaterial&&dd.setValue(Fp,"center",Yt.center);if(dd.setValue(Fp,"modelViewMatrix",Yt.modelViewMatrix),dd.setValue(Fp,"normalMatrix",Yt.normalMatrix),dd.setValue(Fp,"modelMatrix",Yt.matrixWorld),qt.isShaderMaterial||qt.isRawShaderMaterial){const ae=qt.uniformsGroups;for(let ue=0,nt=ae.length;ue<nt;ue++){const nt=ae[ue];$d.update(nt,ad),$d.bind(nt,ad)}}return ad}(ae,ue,nt,qt,Yt);Ld.setMaterial(qt,ys);let lu=nt.index,uu=1;if(!0===qt.wireframe){if(lu=Fd.getWireframeAttribute(nt),void 0===lu)return;uu=2}const _u=nt.drawRange,vu=nt.attributes.position;let wu=_u.start*uu,Hu=(_u.start+_u.count)*uu;null!==Xt&&(wu=Math.max(wu,Xt.start*uu),Hu=Math.min(Hu,(Xt.start+Xt.count)*uu)),null!==lu?(wu=Math.max(wu,0),Hu=Math.min(Hu,lu.count)):void 0!==vu&&null!==vu&&(wu=Math.max(wu,0),Hu=Math.min(Hu,vu.count));const qu=Hu-wu;if(qu<0||qu===1/0)return;let Ju;Jd.setup(Yt,qt,Ec,nt,lu);let ed=Qd;if(null!==lu&&(Ju=Bd.get(lu),ed=Kd,ed.setIndex(Ju)),Yt.isMesh)!0===qt.wireframe?(Ld.setLineWidth(qt.wireframeLinewidth*getTargetPixelRatio()),ed.setMode(Fp.LINES)):ed.setMode(Fp.TRIANGLES);else if(Yt.isLine){let ae=qt.linewidth;void 0===ae&&(ae=1),Ld.setLineWidth(ae*getTargetPixelRatio()),Yt.isLineSegments?ed.setMode(Fp.LINES):Yt.isLineLoop?ed.setMode(Fp.LINE_LOOP):ed.setMode(Fp.LINE_STRIP)}else Yt.isPoints?ed.setMode(Fp.POINTS):Yt.isSprite&&ed.setMode(Fp.TRIANGLES);if(Yt.isBatchedMesh)if(null!==Yt._multiDrawInstances)(0,ut.mcG)("THREE.WebGLRenderer: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection."),ed.renderMultiDrawInstances(Yt._multiDrawStarts,Yt._multiDrawCounts,Yt._multiDrawCount,Yt._multiDrawInstances);else if(Id.get("WEBGL_multi_draw"))ed.renderMultiDraw(Yt._multiDrawStarts,Yt._multiDrawCounts,Yt._multiDrawCount);else{const ae=Yt._multiDrawStarts,ue=Yt._multiDrawCounts,nt=Yt._multiDrawCount,ut=lu?Bd.get(lu).bytesPerElement:1,Xt=zd.get(qt).currentProgram.getUniforms();for(let qt=0;qt<nt;qt++)Xt.setValue(Fp,"_gl_DrawID",qt),ed.render(ae[qt]/ut,ue[qt])}else if(Yt.isInstancedMesh)ed.renderInstances(wu,qu,Yt.count);else if(nt.isInstancedBufferGeometry){const ae=void 0!==nt._maxInstanceCount?nt._maxInstanceCount:1/0,ue=Math.min(nt.instanceCount,ae);ed.renderInstances(wu,qu,ue)}else ed.render(wu,qu)},this.compile=function(ae,ue,nt){void 0===nt&&(nt=null),null===nt&&(nt=ae),_h=Hd.get(nt),_h.init(ue),td.push(_h),nt.traverseVisible((function(ae){ae.isLight&&ae.layers.test(ue.layers)&&(_h.pushLight(ae),ae.castShadow&&_h.pushShadow(ae))})),ae!==nt&&ae.traverseVisible((function(ae){ae.isLight&&ae.layers.test(ue.layers)&&(_h.pushLight(ae),ae.castShadow&&_h.pushShadow(ae))})),_h.setupLights();const ut=new Set;return ae.traverse((function(ae){if(!(ae.isMesh||ae.isPoints||ae.isLine||ae.isSprite))return;const ue=ae.material;if(ue)if(Array.isArray(ue))for(let qt=0;qt<ue.length;qt++){const Yt=ue[qt];prepareMaterial(Yt,nt,ae),ut.add(Yt)}else prepareMaterial(ue,nt,ae),ut.add(ue)})),_h=td.pop(),ut},this.compileAsync=function(ae,ue,nt){void 0===nt&&(nt=null);const ut=this.compile(ae,ue,nt);return new Promise((ue=>{function checkMaterialsReady(){ut.forEach((function(ae){zd.get(ae).currentProgram.isReady()&&ut.delete(ae)})),0!==ut.size?setTimeout(checkMaterialsReady,10):ue(ae)}null!==Id.get("KHR_parallel_shader_compile")?checkMaterialsReady():setTimeout(checkMaterialsReady,10)}))};let Hp=null;function onXRSessionStart(){Wp.stop()}function onXRSessionEnd(){Wp.start()}const Wp=new WebGLAnimation;function projectObject(ae,ue,nt,ut){if(!1===ae.visible)return;if(ae.layers.test(ue.layers))if(ae.isGroup)nt=ae.renderOrder;else if(ae.isLOD)!0===ae.autoUpdate&&ae.update(ue);else if(ae.isLight)_h.pushLight(ae),ae.castShadow&&_h.pushShadow(ae);else if(ae.isSprite){if(!ae.frustumCulled||bd.intersectsSprite(ae)){ut&&Td.setFromMatrixPosition(ae.matrixWorld).applyMatrix4(Md);const ue=jd.update(ae),qt=ae.material;qt.visible&&Ju.push(ae,ue,qt,nt,Td.z,null)}}else if((ae.isMesh||ae.isLine||ae.isPoints)&&(!ae.frustumCulled||bd.intersectsObject(ae))){const ue=jd.update(ae),qt=ae.material;if(ut&&(void 0!==ae.boundingSphere?(null===ae.boundingSphere&&ae.computeBoundingSphere(),Td.copy(ae.boundingSphere.center)):(null===ue.boundingSphere&&ue.computeBoundingSphere(),Td.copy(ue.boundingSphere.center)),Td.applyMatrix4(ae.matrixWorld).applyMatrix4(Md)),Array.isArray(qt)){const ut=ue.groups;for(let Yt=0,Xt=ut.length;Yt<Xt;Yt++){const Xt=ut[Yt],ys=qt[Xt.materialIndex];ys&&ys.visible&&Ju.push(ae,ue,ys,nt,Td.z,Xt)}}else qt.visible&&Ju.push(ae,ue,qt,nt,Td.z,null)}const qt=ae.children;for(let Yt=0,Xt=qt.length;Yt<Xt;Yt++)projectObject(qt[Yt],ue,nt,ut)}function renderScene(ae,ue,nt,ut){const qt=ae.opaque,Yt=ae.transmissive,Xt=ae.transparent;_h.setupLightsView(nt),!0===wd&&Wd.setGlobalState(id.clippingPlanes,nt),ut&&Ld.viewport(cd.copy(ut)),qt.length>0&&renderObjects(qt,ue,nt),Yt.length>0&&renderObjects(Yt,ue,nt),Xt.length>0&&renderObjects(Xt,ue,nt),Ld.buffers.depth.setTest(!0),Ld.buffers.depth.setMask(!0),Ld.buffers.color.setMask(!0),Ld.setPolygonOffset(!1)}function renderTransmissionPass(ae,ue,nt,qt){if(null!==(!0===nt.isScene?nt.overrideMaterial:null))return;void 0===_h.state.transmissionRenderTarget[qt.id]&&(_h.state.transmissionRenderTarget[qt.id]=new ut.nWS(1,1,{generateMipmaps:!0,type:Id.has("EXT_color_buffer_half_float")||Id.has("EXT_color_buffer_float")?ut.ix0:ut.OUM,minFilter:ut.$_I,samples:4,stencilBuffer:Yt,resolveDepthBuffer:!1,resolveStencilBuffer:!1,colorSpace:ut.ppV.workingColorSpace}));const Xt=_h.state.transmissionRenderTarget[qt.id],ys=qt.viewport||cd;Xt.setSize(ys.z*id.transmissionResolutionScale,ys.w*id.transmissionResolutionScale);const Ec=id.getRenderTarget(),lu=id.getActiveCubeFace(),uu=id.getActiveMipmapLevel();id.setRenderTarget(Xt),id.getClearColor(dd),pd=id.getClearAlpha(),pd<1&&id.setClearColor(16777215,.5),id.clear(),Cd&&Zd.render(nt);const _u=id.toneMapping;id.toneMapping=ut.y_p;const vu=qt.viewport;if(void 0!==qt.viewport&&(qt.viewport=void 0),_h.setupLightsView(qt),!0===wd&&Wd.setGlobalState(id.clippingPlanes,qt),renderObjects(ae,nt,qt),Nd.updateMultisampleRenderTarget(Xt),Nd.updateRenderTargetMipmap(Xt),!1===Id.has("WEBGL_multisampled_render_to_texture")){let ae=!1;for(let Yt=0,Xt=ue.length;Yt<Xt;Yt++){const Xt=ue[Yt],ys=Xt.object,Ec=Xt.geometry,lu=Xt.material,uu=Xt.group;if(lu.side===ut.$EB&&ys.layers.test(qt.layers)){const ue=lu.side;lu.side=ut.hsX,lu.needsUpdate=!0,renderObject(ys,nt,qt,Ec,lu,uu),lu.side=ue,lu.needsUpdate=!0,ae=!0}}!0===ae&&(Nd.updateMultisampleRenderTarget(Xt),Nd.updateRenderTargetMipmap(Xt))}id.setRenderTarget(Ec,lu,uu),id.setClearColor(dd,pd),void 0!==vu&&(qt.viewport=vu),id.toneMapping=_u}function renderObjects(ae,ue,nt){const ut=!0===ue.isScene?ue.overrideMaterial:null;for(let qt=0,Yt=ae.length;qt<Yt;qt++){const Yt=ae[qt],Xt=Yt.object,ys=Yt.geometry,Ec=Yt.group;let lu=Yt.material;!0===lu.allowOverride&&null!==ut&&(lu=ut),Xt.layers.test(nt.layers)&&renderObject(Xt,ue,nt,ys,lu,Ec)}}function renderObject(ae,ue,nt,qt,Yt,Xt){ae.onBeforeRender(id,ue,nt,qt,Yt,Xt),ae.modelViewMatrix.multiplyMatrices(nt.matrixWorldInverse,ae.matrixWorld),ae.normalMatrix.getNormalMatrix(ae.modelViewMatrix),Yt.onBeforeRender(id,ue,nt,qt,ae,Xt),!0===Yt.transparent&&Yt.side===ut.$EB&&!1===Yt.forceSinglePass?(Yt.side=ut.hsX,Yt.needsUpdate=!0,id.renderBufferDirect(nt,ue,qt,Yt,ae,Xt),Yt.side=ut.hB5,Yt.needsUpdate=!0,id.renderBufferDirect(nt,ue,qt,Yt,ae,Xt),Yt.side=ut.$EB):id.renderBufferDirect(nt,ue,qt,Yt,ae,Xt),ae.onAfterRender(id,ue,nt,qt,Yt,Xt)}function getProgram(ae,ue,nt){!0!==ue.isScene&&(ue=kd);const ut=zd.get(ae),qt=_h.state.lights,Yt=_h.state.shadowsArray,Xt=qt.state.version,ys=Ud.getParameters(ae,qt.state,Yt,ue,nt),Ec=Ud.getProgramCacheKey(ys);let lu=ut.programs;ut.environment=ae.isMeshStandardMaterial?ue.environment:null,ut.fog=ue.fog,ut.envMap=(ae.isMeshStandardMaterial?Od:Rd).get(ae.envMap||ut.environment),ut.envMapRotation=null!==ut.environment&&null===ae.envMap?ue.environmentRotation:ae.envMapRotation,void 0===lu&&(ae.addEventListener("dispose",onMaterialDispose),lu=new Map,ut.programs=lu);let uu=lu.get(Ec);if(void 0!==uu){if(ut.currentProgram===uu&&ut.lightsStateVersion===Xt)return updateCommonMaterialProperties(ae,ys),uu}else ys.uniforms=Ud.getUniforms(ae),ae.onBeforeCompile(ys,id),uu=Ud.acquireProgram(ys,Ec),lu.set(Ec,uu),ut.uniforms=ys.uniforms;const _u=ut.uniforms;return(ae.isShaderMaterial||ae.isRawShaderMaterial)&&!0!==ae.clipping||(_u.clippingPlanes=Wd.uniform),updateCommonMaterialProperties(ae,ys),ut.needsLights=function(ae){return ae.isMeshLambertMaterial||ae.isMeshToonMaterial||ae.isMeshPhongMaterial||ae.isMeshStandardMaterial||ae.isShadowMaterial||ae.isShaderMaterial&&!0===ae.lights}(ae),ut.lightsStateVersion=Xt,ut.needsLights&&(_u.ambientLightColor.value=qt.state.ambient,_u.lightProbe.value=qt.state.probe,_u.directionalLights.value=qt.state.directional,_u.directionalLightShadows.value=qt.state.directionalShadow,_u.spotLights.value=qt.state.spot,_u.spotLightShadows.value=qt.state.spotShadow,_u.rectAreaLights.value=qt.state.rectArea,_u.ltc_1.value=qt.state.rectAreaLTC1,_u.ltc_2.value=qt.state.rectAreaLTC2,_u.pointLights.value=qt.state.point,_u.pointLightShadows.value=qt.state.pointShadow,_u.hemisphereLights.value=qt.state.hemi,_u.directionalShadowMap.value=qt.state.directionalShadowMap,_u.directionalShadowMatrix.value=qt.state.directionalShadowMatrix,_u.spotShadowMap.value=qt.state.spotShadowMap,_u.spotLightMatrix.value=qt.state.spotLightMatrix,_u.spotLightMap.value=qt.state.spotLightMap,_u.pointShadowMap.value=qt.state.pointShadowMap,_u.pointShadowMatrix.value=qt.state.pointShadowMatrix),ut.currentProgram=uu,ut.uniformsList=null,uu}function getUniformList(ae){if(null===ae.uniformsList){const ue=ae.currentProgram.getUniforms();ae.uniformsList=WebGLUniforms.seqWithValue(ue.seq,ae.uniforms)}return ae.uniformsList}function updateCommonMaterialProperties(ae,ue){const nt=zd.get(ae);nt.outputColorSpace=ue.outputColorSpace,nt.batching=ue.batching,nt.batchingColor=ue.batchingColor,nt.instancing=ue.instancing,nt.instancingColor=ue.instancingColor,nt.instancingMorph=ue.instancingMorph,nt.skinning=ue.skinning,nt.morphTargets=ue.morphTargets,nt.morphNormals=ue.morphNormals,nt.morphColors=ue.morphColors,nt.morphTargetsCount=ue.morphTargetsCount,nt.numClippingPlanes=ue.numClippingPlanes,nt.numIntersection=ue.numClipIntersection,nt.vertexAlphas=ue.vertexAlphas,nt.vertexTangents=ue.vertexTangents,nt.toneMapping=ue.toneMapping}Wp.setAnimationLoop((function(ae){Hp&&Hp(ae)})),"undefined"!==typeof self&&Wp.setContext(self),this.setAnimationLoop=function(ae){Hp=ae,Gp.setAnimationLoop(ae),null===ae?Wp.stop():Wp.start()},Gp.addEventListener("sessionstart",onXRSessionStart),Gp.addEventListener("sessionend",onXRSessionEnd),this.render=function(ae,ue){if(void 0!==ue&&!0!==ue.isCamera)return void console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");if(!0===nd)return;if(!0===ae.matrixWorldAutoUpdate&&ae.updateMatrixWorld(),null===ue.parent&&!0===ue.matrixWorldAutoUpdate&&ue.updateMatrixWorld(),!0===Gp.enabled&&!0===Gp.isPresenting&&(!0===Gp.cameraAutoUpdate&&Gp.updateCamera(ue),ue=Gp.getCamera()),!0===ae.isScene&&ae.onBeforeRender(id,ae,ue,sd),_h=Hd.get(ae,td.length),_h.init(ue),td.push(_h),Md.multiplyMatrices(ue.projectionMatrix,ue.matrixWorldInverse),bd.setFromProjectionMatrix(Md,ut.TdN,ue.reversedDepth),Ed=this.localClippingEnabled,wd=Wd.init(this.clippingPlanes,Ed),Ju=Gd.get(ae,ed.length),Ju.init(),ed.push(Ju),!0===Gp.enabled&&!0===Gp.isPresenting){const ae=id.xr.getDepthSensingMesh();null!==ae&&projectObject(ae,ue,-1/0,id.sortObjects)}projectObject(ae,ue,0,id.sortObjects),Ju.finish(),!0===id.sortObjects&&Ju.sort(Ad,yd),Cd=!1===Gp.enabled||!1===Gp.isPresenting||!1===Gp.hasDepthSensing(),Cd&&Zd.addToRenderList(Ju,ae),this.info.render.frame++,!0===wd&&Wd.beginShadows();const nt=_h.state.shadowsArray;qd.render(nt,ae,ue),!0===wd&&Wd.endShadows(),!0===this.info.autoReset&&this.info.reset();const qt=Ju.opaque,Yt=Ju.transmissive;if(_h.setupLights(),ue.isArrayCamera){const nt=ue.cameras;if(Yt.length>0)for(let ue=0,ut=nt.length;ue<ut;ue++){renderTransmissionPass(qt,Yt,ae,nt[ue])}Cd&&Zd.render(ae);for(let ue=0,ut=nt.length;ue<ut;ue++){const ut=nt[ue];renderScene(Ju,ae,ut,ut.viewport)}}else Yt.length>0&&renderTransmissionPass(qt,Yt,ae,ue),Cd&&Zd.render(ae),renderScene(Ju,ae,ue);null!==sd&&0===ad&&(Nd.updateMultisampleRenderTarget(sd),Nd.updateRenderTargetMipmap(sd)),!0===ae.isScene&&ae.onAfterRender(id,ae,ue),Jd.resetDefaultState(),od=-1,ld=null,td.pop(),td.length>0?(_h=td[td.length-1],!0===wd&&Wd.setGlobalState(id.clippingPlanes,_h.state.camera)):_h=null,ed.pop(),Ju=ed.length>0?ed[ed.length-1]:null},this.getActiveCubeFace=function(){return rd},this.getActiveMipmapLevel=function(){return ad},this.getRenderTarget=function(){return sd},this.setRenderTargetTextures=function(ae,ue,nt){const ut=zd.get(ae);ut.__autoAllocateDepthBuffer=!1===ae.resolveDepthBuffer,!1===ut.__autoAllocateDepthBuffer&&(ut.__useRenderToTexture=!1),zd.get(ae.texture).__webglTexture=ue,zd.get(ae.depthTexture).__webglTexture=ut.__autoAllocateDepthBuffer?void 0:nt,ut.__hasExternalTextures=!0},this.setRenderTargetFramebuffer=function(ae,ue){const nt=zd.get(ae);nt.__webglFramebuffer=ue,nt.__useDefaultFramebuffer=void 0===ue};const Zp=Fp.createFramebuffer();this.setRenderTarget=function(ae,ue,nt){void 0===ue&&(ue=0),void 0===nt&&(nt=0),sd=ae,rd=ue,ad=nt;let ut=!0,qt=null,Yt=!1,Xt=!1;if(ae){const ys=zd.get(ae);if(void 0!==ys.__useDefaultFramebuffer)Ld.bindFramebuffer(Fp.FRAMEBUFFER,null),ut=!1;else if(void 0===ys.__webglFramebuffer)Nd.setupRenderTarget(ae);else if(ys.__hasExternalTextures)Nd.rebindTextures(ae,zd.get(ae.texture).__webglTexture,zd.get(ae.depthTexture).__webglTexture);else if(ae.depthBuffer){const ue=ae.depthTexture;if(ys.__boundDepthTexture!==ue){if(null!==ue&&zd.has(ue)&&(ae.width!==ue.image.width||ae.height!==ue.image.height))throw new Error("WebGLRenderTarget: Attached DepthTexture is initialized to the incorrect size.");Nd.setupDepthRenderbuffer(ae)}}const Ec=ae.texture;(Ec.isData3DTexture||Ec.isDataArrayTexture||Ec.isCompressedArrayTexture)&&(Xt=!0);const lu=zd.get(ae).__webglFramebuffer;ae.isWebGLCubeRenderTarget?(qt=Array.isArray(lu[ue])?lu[ue][nt]:lu[ue],Yt=!0):qt=ae.samples>0&&!1===Nd.useMultisampledRTT(ae)?zd.get(ae).__webglMultisampledFramebuffer:Array.isArray(lu)?lu[nt]:lu,cd.copy(ae.viewport),ud.copy(ae.scissor),hd=ae.scissorTest}else cd.copy(_d).multiplyScalar(fd).floor(),ud.copy(vd).multiplyScalar(fd).floor(),hd=xd;0!==nt&&(qt=Zp);if(Ld.bindFramebuffer(Fp.FRAMEBUFFER,qt)&&ut&&Ld.drawBuffers(ae,qt),Ld.viewport(cd),Ld.scissor(ud),Ld.setScissorTest(hd),Yt){const ut=zd.get(ae.texture);Fp.framebufferTexture2D(Fp.FRAMEBUFFER,Fp.COLOR_ATTACHMENT0,Fp.TEXTURE_CUBE_MAP_POSITIVE_X+ue,ut.__webglTexture,nt)}else if(Xt){const ut=ue;for(let ue=0;ue<ae.textures.length;ue++){const qt=zd.get(ae.textures[ue]);Fp.framebufferTextureLayer(Fp.FRAMEBUFFER,Fp.COLOR_ATTACHMENT0+ue,qt.__webglTexture,nt,ut)}}else if(null!==ae&&0!==nt){const ue=zd.get(ae.texture);Fp.framebufferTexture2D(Fp.FRAMEBUFFER,Fp.COLOR_ATTACHMENT0,Fp.TEXTURE_2D,ue.__webglTexture,nt)}od=-1},this.readRenderTargetPixels=function(ae,ue,nt,ut,qt,Yt,Xt,ys){if(void 0===ys&&(ys=0),!ae||!ae.isWebGLRenderTarget)return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let Ec=zd.get(ae).__webglFramebuffer;if(ae.isWebGLCubeRenderTarget&&void 0!==Xt&&(Ec=Ec[Xt]),Ec){Ld.bindFramebuffer(Fp.FRAMEBUFFER,Ec);try{const Xt=ae.textures[ys],Ec=Xt.format,lu=Xt.type;if(!Dd.textureFormatReadable(Ec))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");if(!Dd.textureTypeReadable(lu))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");ue>=0&&ue<=ae.width-ut&&nt>=0&&nt<=ae.height-qt&&(ae.textures.length>1&&Fp.readBuffer(Fp.COLOR_ATTACHMENT0+ys),Fp.readPixels(ue,nt,ut,qt,Xd.convert(Ec),Xd.convert(lu),Yt))}finally{const ae=null!==sd?zd.get(sd).__webglFramebuffer:null;Ld.bindFramebuffer(Fp.FRAMEBUFFER,ae)}}},this.readRenderTargetPixelsAsync=async function(ae,ue,nt,qt,Yt,Xt,ys,Ec){if(void 0===Ec&&(Ec=0),!ae||!ae.isWebGLRenderTarget)throw new Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let lu=zd.get(ae).__webglFramebuffer;if(ae.isWebGLCubeRenderTarget&&void 0!==ys&&(lu=lu[ys]),lu){if(ue>=0&&ue<=ae.width-qt&&nt>=0&&nt<=ae.height-Yt){Ld.bindFramebuffer(Fp.FRAMEBUFFER,lu);const ys=ae.textures[Ec],uu=ys.format,_u=ys.type;if(!Dd.textureFormatReadable(uu))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.");if(!Dd.textureTypeReadable(_u))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.");const vu=Fp.createBuffer();Fp.bindBuffer(Fp.PIXEL_PACK_BUFFER,vu),Fp.bufferData(Fp.PIXEL_PACK_BUFFER,Xt.byteLength,Fp.STREAM_READ),ae.textures.length>1&&Fp.readBuffer(Fp.COLOR_ATTACHMENT0+Ec),Fp.readPixels(ue,nt,qt,Yt,Xd.convert(uu),Xd.convert(_u),0);const wu=null!==sd?zd.get(sd).__webglFramebuffer:null;Ld.bindFramebuffer(Fp.FRAMEBUFFER,wu);const Hu=Fp.fenceSync(Fp.SYNC_GPU_COMMANDS_COMPLETE,0);return Fp.flush(),await(0,ut.jej)(Fp,Hu,4),Fp.bindBuffer(Fp.PIXEL_PACK_BUFFER,vu),Fp.getBufferSubData(Fp.PIXEL_PACK_BUFFER,0,Xt),Fp.deleteBuffer(vu),Fp.deleteSync(Hu),Xt}throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.")}},this.copyFramebufferToTexture=function(ae,ue,nt){void 0===ue&&(ue=null),void 0===nt&&(nt=0);const ut=Math.pow(2,-nt),qt=Math.floor(ae.image.width*ut),Yt=Math.floor(ae.image.height*ut),Xt=null!==ue?ue.x:0,ys=null!==ue?ue.y:0;Nd.setTexture2D(ae,0),Fp.copyTexSubImage2D(Fp.TEXTURE_2D,nt,0,0,Xt,ys,qt,Yt),Ld.unbindTexture()};const Yp=Fp.createFramebuffer(),Qp=Fp.createFramebuffer();this.copyTextureToTexture=function(ae,ue,nt,qt,Yt,Xt){let ys,Ec,lu,uu,_u,vu,wu,Hu,qu;void 0===nt&&(nt=null),void 0===qt&&(qt=null),void 0===Yt&&(Yt=0),void 0===Xt&&(Xt=null),null===Xt&&(0!==Yt?((0,ut.mcG)("WebGLRenderer: copyTextureToTexture function signature has changed to support src and dst mipmap levels."),Xt=Yt,Yt=0):Xt=0);const Ju=ae.isCompressedTexture?ae.mipmaps[Xt]:ae.image;if(null!==nt)ys=nt.max.x-nt.min.x,Ec=nt.max.y-nt.min.y,lu=nt.isBox3?nt.max.z-nt.min.z:1,uu=nt.min.x,_u=nt.min.y,vu=nt.isBox3?nt.min.z:0;else{const ue=Math.pow(2,-Yt);ys=Math.floor(Ju.width*ue),Ec=Math.floor(Ju.height*ue),lu=ae.isDataArrayTexture?Ju.depth:ae.isData3DTexture?Math.floor(Ju.depth*ue):1,uu=0,_u=0,vu=0}null!==qt?(wu=qt.x,Hu=qt.y,qu=qt.z):(wu=0,Hu=0,qu=0);const _h=Xd.convert(ue.format),ed=Xd.convert(ue.type);let td;ue.isData3DTexture?(Nd.setTexture3D(ue,0),td=Fp.TEXTURE_3D):ue.isDataArrayTexture||ue.isCompressedArrayTexture?(Nd.setTexture2DArray(ue,0),td=Fp.TEXTURE_2D_ARRAY):(Nd.setTexture2D(ue,0),td=Fp.TEXTURE_2D),Fp.pixelStorei(Fp.UNPACK_FLIP_Y_WEBGL,ue.flipY),Fp.pixelStorei(Fp.UNPACK_PREMULTIPLY_ALPHA_WEBGL,ue.premultiplyAlpha),Fp.pixelStorei(Fp.UNPACK_ALIGNMENT,ue.unpackAlignment);const id=Fp.getParameter(Fp.UNPACK_ROW_LENGTH),nd=Fp.getParameter(Fp.UNPACK_IMAGE_HEIGHT),rd=Fp.getParameter(Fp.UNPACK_SKIP_PIXELS),ad=Fp.getParameter(Fp.UNPACK_SKIP_ROWS),sd=Fp.getParameter(Fp.UNPACK_SKIP_IMAGES);Fp.pixelStorei(Fp.UNPACK_ROW_LENGTH,Ju.width),Fp.pixelStorei(Fp.UNPACK_IMAGE_HEIGHT,Ju.height),Fp.pixelStorei(Fp.UNPACK_SKIP_PIXELS,uu),Fp.pixelStorei(Fp.UNPACK_SKIP_ROWS,_u),Fp.pixelStorei(Fp.UNPACK_SKIP_IMAGES,vu);const od=ae.isDataArrayTexture||ae.isData3DTexture,ld=ue.isDataArrayTexture||ue.isData3DTexture;if(ae.isDepthTexture){const nt=zd.get(ae),ut=zd.get(ue),qt=zd.get(nt.__renderTarget),Ju=zd.get(ut.__renderTarget);Ld.bindFramebuffer(Fp.READ_FRAMEBUFFER,qt.__webglFramebuffer),Ld.bindFramebuffer(Fp.DRAW_FRAMEBUFFER,Ju.__webglFramebuffer);for(let _h=0;_h<lu;_h++)od&&(Fp.framebufferTextureLayer(Fp.READ_FRAMEBUFFER,Fp.COLOR_ATTACHMENT0,zd.get(ae).__webglTexture,Yt,vu+_h),Fp.framebufferTextureLayer(Fp.DRAW_FRAMEBUFFER,Fp.COLOR_ATTACHMENT0,zd.get(ue).__webglTexture,Xt,qu+_h)),Fp.blitFramebuffer(uu,_u,ys,Ec,wu,Hu,ys,Ec,Fp.DEPTH_BUFFER_BIT,Fp.NEAREST);Ld.bindFramebuffer(Fp.READ_FRAMEBUFFER,null),Ld.bindFramebuffer(Fp.DRAW_FRAMEBUFFER,null)}else if(0!==Yt||ae.isRenderTargetTexture||zd.has(ae)){const nt=zd.get(ae),ut=zd.get(ue);Ld.bindFramebuffer(Fp.READ_FRAMEBUFFER,Yp),Ld.bindFramebuffer(Fp.DRAW_FRAMEBUFFER,Qp);for(let ae=0;ae<lu;ae++)od?Fp.framebufferTextureLayer(Fp.READ_FRAMEBUFFER,Fp.COLOR_ATTACHMENT0,nt.__webglTexture,Yt,vu+ae):Fp.framebufferTexture2D(Fp.READ_FRAMEBUFFER,Fp.COLOR_ATTACHMENT0,Fp.TEXTURE_2D,nt.__webglTexture,Yt),ld?Fp.framebufferTextureLayer(Fp.DRAW_FRAMEBUFFER,Fp.COLOR_ATTACHMENT0,ut.__webglTexture,Xt,qu+ae):Fp.framebufferTexture2D(Fp.DRAW_FRAMEBUFFER,Fp.COLOR_ATTACHMENT0,Fp.TEXTURE_2D,ut.__webglTexture,Xt),0!==Yt?Fp.blitFramebuffer(uu,_u,ys,Ec,wu,Hu,ys,Ec,Fp.COLOR_BUFFER_BIT,Fp.NEAREST):ld?Fp.copyTexSubImage3D(td,Xt,wu,Hu,qu+ae,uu,_u,ys,Ec):Fp.copyTexSubImage2D(td,Xt,wu,Hu,uu,_u,ys,Ec);Ld.bindFramebuffer(Fp.READ_FRAMEBUFFER,null),Ld.bindFramebuffer(Fp.DRAW_FRAMEBUFFER,null)}else ld?ae.isDataTexture||ae.isData3DTexture?Fp.texSubImage3D(td,Xt,wu,Hu,qu,ys,Ec,lu,_h,ed,Ju.data):ue.isCompressedArrayTexture?Fp.compressedTexSubImage3D(td,Xt,wu,Hu,qu,ys,Ec,lu,_h,Ju.data):Fp.texSubImage3D(td,Xt,wu,Hu,qu,ys,Ec,lu,_h,ed,Ju):ae.isDataTexture?Fp.texSubImage2D(Fp.TEXTURE_2D,Xt,wu,Hu,ys,Ec,_h,ed,Ju.data):ae.isCompressedTexture?Fp.compressedTexSubImage2D(Fp.TEXTURE_2D,Xt,wu,Hu,Ju.width,Ju.height,_h,Ju.data):Fp.texSubImage2D(Fp.TEXTURE_2D,Xt,wu,Hu,ys,Ec,_h,ed,Ju);Fp.pixelStorei(Fp.UNPACK_ROW_LENGTH,id),Fp.pixelStorei(Fp.UNPACK_IMAGE_HEIGHT,nd),Fp.pixelStorei(Fp.UNPACK_SKIP_PIXELS,rd),Fp.pixelStorei(Fp.UNPACK_SKIP_ROWS,ad),Fp.pixelStorei(Fp.UNPACK_SKIP_IMAGES,sd),0===Xt&&ue.generateMipmaps&&Fp.generateMipmap(td),Ld.unbindTexture()},this.copyTextureToTexture3D=function(ae,ue,nt,qt,Yt){return void 0===nt&&(nt=null),void 0===qt&&(qt=null),void 0===Yt&&(Yt=0),(0,ut.mcG)('WebGLRenderer: copyTextureToTexture3D function has been deprecated. Use "copyTextureToTexture" instead.'),this.copyTextureToTexture(ae,ue,nt,qt,Yt)},this.initRenderTarget=function(ae){void 0===zd.get(ae).__webglFramebuffer&&Nd.setupRenderTarget(ae)},this.initTexture=function(ae){ae.isCubeTexture?Nd.setTextureCube(ae,0):ae.isData3DTexture?Nd.setTexture3D(ae,0):ae.isDataArrayTexture||ae.isCompressedArrayTexture?Nd.setTexture2DArray(ae,0):Nd.setTexture2D(ae,0),Ld.unbindTexture()},this.resetState=function(){rd=0,ad=0,sd=null,Ld.reset(),Jd.reset()},"undefined"!==typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}get coordinateSystem(){return ut.TdN}get outputColorSpace(){return this._outputColorSpace}set outputColorSpace(ae){this._outputColorSpace=ae;const ue=this.getContext();ue.drawingBufferColorSpace=ut.ppV._getDrawingBufferColorSpace(ae),ue.unpackColorSpace=ut.ppV._getUnpackColorSpace()}}},8330:ae=>{"use strict";ae.exports=JSON.parse('{"rE":"4.2.0","Jk":{"O":"https://gitlab.com/panoramax/clients/web-viewer"}}')},4149:ae=>{"use strict";ae.exports=JSON.parse('{"maplibre":{"GeolocateControl.LocationNotAvailable":"Placering ikke tilg\xe6ngelig","GeolocateControl.FindMyLocation":"Find min placering"},"pnx":{"minimize":"Skjul dette modul, du kan vise det igen ved hj\xe6lp af knappen i nederste venstre hj\xf8rne","share_embed_docs":"L\xe6s mere om indlejringskonfiguration","zoom":"Zoom","zoomOut":"Zoom ud","zoomIn":"Zoom ind","moveUp":"Ryk opad","moveDown":"Ryk nedad","moveLeft":"Ryk til venstre","moveRight":"Ryk til h\xf8jre","moveMiddle":"Centreret visning","expand":"Udvid","expand_info":"F\xe5 modulet til at blive vist p\xe5 hele siden","show_psv":"Vis billedfremviseren","show_map":"Vis kortet","options":"Valgmuligheder","filters":"Filtre","layers":"Lag","search":"S\xf8g","search_empty":"Ingen resultater fundet","search_user":"S\xf8g efter et brugernavn\u2026","share":"Del","share_links":"Links","share_page":"Link til dette billede","share_image":"HD-billede","share_rss":"RSS-feed","share_rss_title":"RSS-feed med nye sekvenser i det aktuelt synlige kortomr\xe5de","share_embed":"Indlejr p\xe5 din hjemmeside","share_print":"Udskriv","copy":"Kopi\xe9r","copied":"Kopieret","error_retry":"Pr\xf8v igen senere","sequence_next":"N\xe6ste billede i sekvensen","sequence_play":"Afspil denne sekvens","sequence_more":"Flere afspilningsmuligheder","sequence_speed":"Afspillerens hastighed","legend_license":"Licens: {l}","legend_title":"Vis detaljer om billedet","error_click":"Forts\xe6t","error":"Vi har et problem\u2026","search_address":"S\xf8g efter en adresse, by\u2026","sequence_pause":"S\xe6t sekvensen p\xe5 pause","sequence_prev":"Forrige billede i sekvensen","loading_labels_serious":["\ud83d\uddfa\ufe0f Indl\xe6ser kortdata","\ud83d\udda5\ufe0f Anmoder API","\ud83d\uddbc\ufe0f Indl\xe6ser thumbnails","\ud83d\udd0d Analyserer EXIF-metadata","\ud83c\udfd8\ufe0f 3D-rendering","\ud83d\udcf7 Initialiserer 360\xb0-billeder","\ud83d\udfe0 Farveafstemning","\ud83d\udcaf Beregning af kvalitetsscore \xa9","\ud83d\udce1 Downloader opdateringer","\ud83c\udf0d Henter kortfliser","\ud83d\udcf8 Behandler skygger"],"edit_osm":"Rediger OSM","josm_live":"Aktiv\xe9r automatisk JOSM-synkronisering ved indl\xe6sning af billeder","loading_labels_fun":["\ud83e\udd8c Registrering af skilte om hjortekrydsning","\ud83d\ude98 S\xf8ger Panoramax Car \xa9","\u2615 Injicerer koffein","\ud83d\ude00 Smil, du er blevet kortlagt!","\ud83d\udc08 Deler kattebilleder","\ud83d\ude34 Reducerer overspringshandlinger","\ud83e\uded6 Brygger te","\ud83d\udc27 \xc5bner kildekode","\ud83d\ude87 Indekser undergrundsstationer","\ud83e\uddf9 Metadata-oprydning","\ud83d\ude92 Sender billeder af brandstation","\ud83d\udeb2 Opdatering af Greenways","\ud83d\ude89 Gennemgang af perron p\xe5 station","\ud83d\udef0\ufe0f S\xf8ger efter satellitter","\ud83d\udc65 Skriver personaer","\ud83d\udc1f Finder fish and chip butik","\ud83e\uddd1\u200d\ud83d\udcbb Gr\xe6nseflade til fejlfinding","\ud83d\udcc8 Inkrementelle statistikker","\ud83e\udd16 L\xe6rer semantik","\ud83c\udfa8 Redesign af gr\xe6nseflade","\ud83d\udcc5 Planl\xe6gning af foto-kortl\xe6gningsfester","\ud83e\uddc0 Modning af cheddars","\ud83c\udf04 Beregning af Cornwalls solskin","\ud83c\udf0a M\xe5ling af h\xf8jvande"],"error_psv":"Photo Sphere Viewer indl\xe6ses ikke korrekt","error_nopic":"Intet billede tilg\xe6ngeligt p\xe5 den givne position","error_api":"Billedserveren er ikke tilg\xe6ngelig","error_webgl":"WebGL underst\xf8ttes ikke af din browser","filter_date":"Dato","filter_date_1month":"1 m\xe5ned","filter_date_1year":"1 \xe5r","filter_user":"Bruger","filter_user_mypics":"Mine billeder","filter_picture":"Billedtype","filter_zoom_in":"Zoom ind p\xe5 kortet for at se dette filter","picture_flat":"Klassisk","picture_360":"360\xb0","filter_qualityscore_help":"Klik for at aktivere eller deaktivere","map_background":"Kortbaggrund","map_background_aerial":"Luftfoto","map_background_streets":"Gader","map_theme":"Korttema","error_pic":"Det \xf8nskede billede blev ikke fundet","error_api_compatibility":"Billedserveren er ikke kompatibel med denne version af fremviseren","filter_qualityscore":"Kvalitetsscore","error_josm":"JOSM svarer ikke, k\xf8rer den, og er fjernstyring aktiveret?","metadata_general_seqid_link":"G\xe5 til JSON-beskrivelse af sekvensen","map_theme_default":"Klassisk","map_theme_age_1":"> 2 \xe5r","map_theme_age_2":"< 2 \xe5r","map_theme_age_3":"< 1 \xe5r","map_theme_age_4":"< 1 m\xe5ned","map_theme_type":"Kameratype","map_theme_score":"Kvalitetsscore","contrast":"Aktiv\xe9r h\xf8jere billedkontrast","metadata_general_picid":"Billede","metadata_general_seqid":"Sekvens","metadata_general_picid_link":"G\xe5 til JSON-beskrivelse af billedet","metadata_general_author":"Forfatter","metadata_general_license":"Licens","metadata_general_license_link":"Se den fulde licensbeskrivelse","metadata_general_date":"Optagelsesdato","metadata_camera":"Kamera","metadata_camera_make":"Fabrikat","metadata_camera_model":"Model","metadata_camera_type":"Type","metadata_camera_resolution":"Opl\xf8sning","metadata_camera_focal_length":"Br\xe6ndvidde","metadata_location_latitude":"Breddegrad","metadata_location_orientation":"Retning","metadata_location_precision":"Pr\xe6cision i positionering","metadata_quality":"Kvalitet","metadata_quality_score":"Global score","metadata_quality_gps_score":"Positioneringsscore","metadata_quality_help":"F\xe5 mere at vide om kvalitetsscore","map_theme_age":"Optagelsesdato","metadata_location":"Position","metadata":"Metadata for billede","metadata_location_longitude":"L\xe6ngdegrad","metadata_quality_resolution_score":"Opl\xf8sningsscore","metadata_quality_missing":"ingen v\xe6rdi indstillet i billedet","metadata_exif":"EXIF","metadata_exif_name":"Tag","metadata_exif_value":"V\xe6rdi","report":"Indberet","report_auth":"Denne indberetning vil blive sendt via din konto \\"{a}\\"","report_nature_label":"Problemets karakter","report_nature":{"":"V\xe6lg problemets art\u2026","blur_missing":"En persons ansigt eller bils nummerplade er synlig","blur_excess":"Et objekt, der ikke har brug for sl\xf8ring, sl\xf8res","inappropriate":"Billedet er upassende (ikke relevant, n\xf8genhed\u2026)","privacy":"En privat sti eller ejendom er synlig","picture_low_quality":"Billedet er af meget d\xe5rlig kvalitet","mislocated":"Billedet er d\xe5rligt placeret p\xe5 kortet","copyright":"Billedet kr\xe6nker ophavsretten","other":"Enhver anden form for problem"},"report_whole_sequence":"Det g\xe6lder hele sekvensen","report_details":"Yderligere detaljer","report_details_placeholder":"Hvis du vil, kan du tilf\xf8je detaljer om problemet, og hvad det drejer sig om","report_email":"Din e-mail","report_email_placeholder":"Valgfri","report_submit":"Indsend","report_wait":"Sender indberetning \u2026","report_success":"Indberetningen er blevet sendt. Den vil blive gennemg\xe5et s\xe5 hurtigt som muligt.","report_failure":"Der opstod en fejl under oprettelse af indberetning: {e}. Pr\xf8v venligst igen senere.","qualityscore_title":"Om kvalitetsscoren","qualityscore_doc_2":"Bed\xf8mmelsen vises for brugerne som en A/B/C/D/E-score (A er den bedste, E den d\xe5rligste) og vises grafisk via denne skala:","qualityscore_doc_3":"Den beregnes ud fra GPS-pr\xe6cision og billedopl\xf8sning. Et professionelt system vil have en A-rating, et 360\xb0 actionkamera vil have en B-rating, og en smartphone vil have en C/D/E-rating.","qualityscore_doc_link":"Yderligere oplysninger om kvalitetsscoren","qualityscore_doc_1":"Panoramax tilbyder en kvalitetsscore for hvert billede. Det giver mulighed for nem kortfiltrering og overskuelig visning af tilg\xe6ngelige billeder af h\xf8j kvalitet.","minimize_short":"Skjul","id":"iD","josm":"JOSM","metadata_general_instance":"Oprindelse instans","contribute_id":"Bidrag til OpenStreetMap med iD-editor","geo_uri":"Ekstern app","picture_flat_long":"Klassisk billede","picture_360_long":"Panoramabillede","metadata_summary":"Opsummering","metadata_general_copy_id":"Kopi-ID","metadata_general_copy_picid":"Kopi billed-ID","filter_date_6months":"6 m\xe5neder","picture_all":"Alle","panoramax":"Panoramax","semantics_send_ok":"Dine redigeringer blev indsendt"},"psv":{"loadError":"Panoramaet kan ikke indl\xe6ses","twoFingers":"Brug to fingre til at navigere","ctrlZoom":"Brug ctrl + scroll til at zoome ind p\xe5 billedet"},"map":{"loading":"Indl\xe6ser\u2026","thumbnail":"Miniature af billedet, der holdes","not_public":"Ikke offentligt synlig","slow_loading":"Kortet indl\xe6ses langsomt og kan virke defekt","map_data":"Kortdata: {m}","more_panoramax":"F\xe5 mere at vide om Panoramax"}}')},369:ae=>{"use strict";ae.exports=JSON.parse('{"pnx":{"options":"Optionen","filters":"Filter","search":"Suche","layers":"Ebenen","share_links":"Links","share_page":"Link zu diesem Bild","loading_labels_fun":["\ud83e\udd8c Erkennung von \\"Reh kreuzt\\"-Schildern","\ud83d\ude98 Suche Panoramax-Auto \xa9","\u2615 Koffeininjektion","\ud83d\ude00 L\xe4chle, Du wirst kartografiert!","\ud83d\udc08 Katzenfotos teilen","\ud83d\ude34 Vermeide Prokrastination","\ud83c\udf7a\ufe0f Bier brauen","\ud83d\udc27 Quellcode \xf6ffnen","\ud83d\udee3\ufe0f Indizierung der Autobahnen","\ud83e\uddf9 Metadaten aufr\xe4umen","\ud83d\ude92 Sende Fotos von Feuerwachen","\ud83d\udeb2 Radwege aktualisieren","\ud83d\ude89 Bahnsteig ablaufen","\ud83d\udef0\ufe0f Suche Satelliten","\ud83d\udc65 Personas anlegen","\ud83c\udf2d\ufe0f Orte n\xe4chsten Currywurst-Stand","\ud83e\uddd1\u200d\ud83d\udcbb Fehlerbehebung wird ausgef\xfchrt","\ud83d\udcc8 Statistiken anpassen","\ud83e\udd16 Suche den Sinn des Lebens","\ud83c\udfa8 Benutzeroberfl\xe4che neu gestalten","\ud83d\udcc5 Fotomapping-Partys planen","\ud83e\uddc0 Dem Emmentaler beim Reifen zuschauen","\ud83c\udf04 Sonnenstand berechnen","\ud83c\udf0a Messung der Gezeiten"],"search_empty":"Keine Ergebnisse gefunden","share":"Teilen","metadata_general_picid":"Bild","zoom":"Zoom","zoomOut":"Herauszoomen","zoomIn":"Hereinzoomen","moveUp":"Nach oben","moveDown":"Nach unten","moveRight":"Nach rechts","moveMiddle":"Sicht zentrieren","map_theme_age":"Aufnahmedatum","expand":"Ausklappen","expand_info":"Widget im Vollbild anzeigen","show_psv":"Bildbetrachter anzeigen","show_map":"Karte anzeigen","search_user":"Suche einen Nutzernamen\u2026","filter_zoom_in":"Vergr\xf6\xdfere die Karte, um diesen Filter zu anzuwenden","picture_flat":"Klassisch","picture_360":"360\xb0","filter_camera_model":"Nach Kameramodell","map_background":"Kartenhintergrund","map_background_aerial":"Satelliten","map_background_streets":"Stra\xdfen","map_theme":"Karten-Art","metadata_exif_name":"Tag","metadata_exif_value":"Wert","map_theme_age_2":"< 2 Jahre","map_theme_age_3":"< 1 Jahr","map_theme_type":"Kameratyp","contrast":"H\xf6heren Bildkontrast aktivieren","metadata":"Bildmetadaten","metadata_general_seqid":"Sequenz","metadata_general_picid_link":"Zur JSON-Beschreibung des Bildes wechseln","loading_labels_serious":["\ud83d\uddfa\ufe0f Lade Kartendaten","\ud83d\udda5\ufe0f API anfragen","\ud83d\uddbc\ufe0f Vorschaubilder laden","\ud83d\udd0d EXIF-Metadaten analysieren","\ud83c\udfd8\ufe0f 3D-Rendering","\ud83d\udcf7 360\xb0 Fotos initialisieren","\ud83d\udfe0 Farben ausgleichen","\ud83d\udcaf Berechne Quality Score \xa9","\ud83d\udce1 Herunterladen von Updates","\ud83c\udf0d Lade Kartenausschnitte","\ud83d\udcf8 Bearbeitung der Schatten"],"search_address":"Suche eine Adresse, Stadt, \u2026","share_image":"HD-Bild","share_rss":"RSS-Feed","share_embed":"Auf Webseite einbetten","share_print":"Drucken","copy":"Kopieren","copied":"Kopiert","error":"Ein Fehler ist aufgetreten\u2026","sequence_next":"N\xe4chstes Foto in der Sequenz","sequence_play":"Sequenz abspielen","sequence_pause":"Sequenz pausieren","sequence_prev":"Vorheriges Foto in der Sequenz","sequence_more":"Mehr Abspieloptionen","sequence_speed":"Abspielgeschwindigkeit","legend_license":"Lizenz: {l}","edit_osm":"OSM editieren","id":"iD","josm":"JOSM","josm_live":"Einschalten der automatischen JOSM-Synchronisierung beim Laden eines Bildes","error_psv":"Betrachter f\xfcr die Photospheres wurde nicht richtig geladen","error_pic":"Angefragtes Foto wurde nicht gefunden","error_nopic":"Kein Foto an dieser Position verf\xfcgbar","error_api":"Foto-Server ist nicht erreichbar","error_josm":"JOSM reagiert nicht. Ist das Programm ge\xf6ffnet und die Remote-Verbindung aktiv?","error_api_compatibility":"Der Foto-Server ist nicht mit dieser Version des Betrachters kompatibel","filter_date":"Datum","filter_user":"Benutzer","filter_picture":"Art des Fotos","map_theme_default":"Klassisch","map_theme_age_1":"> 2 Jahre","metadata_general_seqid_link":"Zur JSON-Beschreibung der Sequenz wechseln","metadata_general_author":"Autor","metadata_general_license":"Lizenz","metadata_general_date":"Aufnahmedatum","metadata_camera":"Kamera","metadata_camera_make":"Hersteller","metadata_camera_model":"Modell","metadata_camera_type":"Typ","metadata_camera_focal_length":"Brennweite","metadata_location":"Position","metadata_location_longitude":"L\xe4ngengrad","metadata_location_latitude":"Breitengrad","metadata_location_orientation":"Richtung","metadata_location_precision":"Genauigkeit der Positionierung","metadata_exif":"EXIF","minimize":"Dieses Widget verbergen. Du kannst es \xfcber die Schaltfl\xe4che in der linken, unteren Ecke wieder einblenden","map_theme_age_4":"< 1 Monat","error_subtitle":"Bitte versuchen sie es sp\xe4ter erneut, oder schauen sie in die Web-Browser-Konsole f\xfcr mehr Details.","moveLeft":"Nach links","share_rss_title":"RSS-Feed neuer Sequenzen auf dem aktuell sichtbaren Kartenbereich","error_webgl":"WebGL wird von ihrem Browser nicht unterst\xfctzt","metadata_general_license_link":"Vollst\xe4ndige Lizenzbeschreibung anschauen","share_embed_docs":"Mehr \xfcber die Einbettungs-Konfiguration lesen","report_nature":{"":"Art des Problems ausw\xe4hlen\u2026","inappropriate":"Das Bild ist unangemessen (irrelevant, Nacktheit, ...)","picture_low_quality":"Das Bild hat eine sehr schlechte Qualit\xe4t","blur_missing":"Das Gesicht einer Person oder ein KFZ-Kennzeichen ist sichtbar","blur_excess":"Ein Objekt wurde unkenntlich gemacht, obwohl es nicht erforderlich war","privacy":"Ein privater Pfad oder ein privates Grundst\xfcck ist sichtbar","mislocated":"Das Bild ist falsch auf der Karte eingezeichnet","copyright":"Das Bild verst\xf6\xdft gegen das Urheberrecht","other":"Eine andere Art von Problem"},"report_details_placeholder":"Du kannst optional Details \xfcber das Problem hinzuf\xfcgen","report_auth":"Diese Meldung wird \xfcber dein Konto \\"{a}\\" gesendet","report_nature_label":"Ursache des Problems","report_whole_sequence":"Dies betrifft die gesamte Sequenz","report_details":"Weitere Details","report_email":"Deine Email-Adresse","report_email_placeholder":"Optional","report_submit":"Absenden","report_success":"Deine Meldung wurde erfolgreich gesendet. Sie wird so schnell wie m\xf6glich \xfcberpr\xfcft.","report_failure":"Bei der Erstellung der Meldung ist ein Fehler aufgetreten: {e}. Bitte versuche es sp\xe4ter erneut.","report":"Melden","legend_title":"Zeige Bilderdetails","report_wait":"Meldung wird gesendet\u2026","error_click":"Weiter","error_retry":"Bitte sp\xe4ter erneut versuchen","metadata_camera_resolution":"Aufl\xf6sung","filter_user_mypics":"Meine Fotos","metadata_quality_missing":"kein Wert im Foto gesetzt","filter_date_1month":"1 Monat","filter_date_1year":"1 Jahr","filter_qualityscore":"Qualit\xe4tswert","filter_qualityscore_help":"Zum Aktivieren oder Deaktivieren klicken","map_theme_score":"Qualit\xe4tswert","metadata_quality":"Qualit\xe4t","metadata_quality_help":"Erfahre mehr \xfcber den Qualit\xe4tswert","metadata_quality_resolution_score":"Bewertung der Aufl\xf6sung","metadata_quality_gps_score":"Bewertung der Position","metadata_quality_score":"Gesamtwertung","qualityscore_title":"\xdcber den Qualit\xe4tswert","qualityscore_doc_link":"Weitere Informationen zur Berechnung des Qualit\xe4tsfaktors findest du in unserer Dokumentation","qualityscore_doc_1":"Panoramax ordnet jedem Bild einen Qualit\xe4tswert zu. Dies erm\xf6glicht eine einfache Filterung auf der Karte und eine schnelle Anzeige von qualitativ hochwertigen Bildern.","qualityscore_doc_2":"Der Qualit\xe4tswert wird den Benutzern als A/B/C/D/E-Bewertung angezeigt (A ist am Besten, E am Schlechtesten) und anhand dieser Skala veranschaulicht:","qualityscore_doc_3":"Die Berechnung erfolgt auf der Grundlage der GPS-Genauigkeit und der Bildaufl\xf6sung. Ein professionelles System wird mit A bewertet, eine 360-Grad-Action-Kamera mit B, und ein Smartphone mit C/D/E.","minimize_short":"Verbergen","semantics_features_none":"Bislang wurde kein Feature in diesem Bild markiert.","semantics_features_default_title":"Tag {nb}","semantics_features_subtitle":"{nb} assoziierte Eigenschaften","semantics_show_all_tags":"Alle Tags anzeigen","semantics_title":"Tags","semantics_tags":"{nb] Tags","semantics_features":"Features im Bild","semantics_hide_all_tags":"Alle Tags verbergen","semantics_annotation_tooltip":"Klicke, um Details zu sehen","semantics_key":"Schl\xfcssel","semantics_value":"Wert","semantics_key_doc":"Mehr \xfcber diesen Schl\xfcssel erfahren","semantics_value_doc":"Mehr \xfcber dieses Tag erfahren","semantics_tags_picture":"Foto-Schlagworte","semantics_tags_picture_none":"Bislang wurden keine Schlagworte f\xfcr dieses Foto gesetzt.","semantics_show_annotations":"Features im Bild anzeigen","semantics_hide_annotations":"Features im Bild verbergen","semantics_wikidata_properties":{"P31":"Instanz von","P279":"Unterklasse von","P361":"Teil von"},"metadata_exif_doc":"Dokumentation der EXIF-Tags","metadata_exif_doc_title":"Wechsle zur Exiv2-Dokumentation f\xfcr eine vollst\xe4ndige Beschreibung von EXIF- und XMP-Tags","metadata_location_coordinates":"Koordinaten (L\xe4ngengrad, Breitengrad)","metadata_location_copy":"Kopiere {v}","metadata_location_copy_more":"Mehr Optionen zum Kopieren der Koordinaten","whats_panoramax":"Panoramax ist eine Geo-Commons f\xfcr Gebietsfotos.","picture_360_long":"Panoramafoto","metadata_summary":"Zusammenfassung","filter_date_6months":"6 Monate","picture_all":"Alle","picture_flat_long":"Klassisches Foto","metadata_general_instance":"Quell-Instanz","geo_uri":"Externe App","contribute_id":"Zu OpenStreetMap mit dem iD Editor beitragen","metadata_general_copy_id":"ID kopieren","metadata_general_copy_picid":"Kopiere Foto-ID","semantics_qualifiers":"Qualifikatoren","panoramax":"Panoramax","semantics_zero_annotations":"In diesem Bild wurden keine Features markiert","semantics_hashtags":"Bild-Hashtags","semantics_editor_error":"Die Syntax ist ung\xfcltig. Deine Tags sollten so aussehen:\\nSchl\xfcssel=Wert\\nPr\xe4fix|Schl\xfcssel=Wert\\nPr\xe4fix|Schl\xfcssel[Qualif_Schl\xfcssel=Qualif_Wert]=Wert\\n\\nDie maximale L\xe4nge eines Schl\xfcssels betr\xe4gt 256 Zeichen, die eines Wertes betr\xe4gt 2048 Zeichen.","semantics_cantsave_invalid":"\xc4nderungen k\xf6nnen nicht angewendet werden, Eingabe ist ung\xfcltig","semantics_editor_example":"Schl\xfcssel=Wert\\nPr\xe4fix|Schl\xfcssel=Wert","semantics_edit":"Attribute bearbeiten","semantics_save":"\xc4nderungen speichern","semantics_undo":"Bearbeitung abbrechen","semantics_send_fail":"\xc4nderungen k\xf6nnen nicht angewendet werden. Bitte versuche es sp\xe4ter noch einmal","semantics_send_ok":"\xc4nderungen wurden erfolgreich hochgeladen","semantics_save_drawn_annotation":"Position speichern","semantics_undo_drawn_annotation":"Abbrechen","semantics_save_drawn_annotation_incomplete":"Sie m\xfcssen vor der Validierung ein Rechteck dass in das Foto passt zeichnen","semantics_delete_annotation":"Dieses Feature l\xf6schen","semantics_delete_annotation_confirm":"M\xf6chtest du dieses Tag wirklich l\xf6schen?","semantics_add_annotation":"Neues Tag hinzuf\xfcgen","semantics_draw_annotation":"Du kannst ein Objekt im Bild markieren, um es hinzuzuf\xfcgen (optional).","semantics_login_needed":"Um Tags oder Features in Fotos zu bearbeiten, ist es erforderlich, in Panoramax-Instanz {n} angemeldet zu sein. M\xf6chtest du dich anmelden?","semantics_doc_title":"\xdcber Tags","semantics_erase_annotation":"Markiertes Feature entfernen","semantics_doc_info1":"Stelle mittels Tags mehr Kontext zu einem Bild bereit. Mit dem Tag transport=car kannst du markieren, dass es mit Hilfe eines Autos aufgenommen wurde.","semantics_doc":"Hilfe","semantics_doc_info3":"Einige Objekte werden automatisch mittels KI erkannt: Eine gute Erkennungsrate kann nicht garantiert werden.","semantics_doc_link":"Erfahre mehr \xfcber Tags","semantics_doc_info2":"Du kannst auch Objekte im Bild markieren: Verkehrszeichen, Stadtmobiliar\u2026 Nutze bestehende Tags, um zu markieren, was du siehst. Du kannst au\xdferdem, falls erforderlich, neue Tags erstellen.","semantics_sequence_tags":"Sequenz-Tag","semantics_picture_tags":"Bild-Tag","semantics_annotation_tags":"Objekt-Tag","filter_gps_precision":"Standortgenauigkeit","filter_gps_precision_lessthan":"Weniger als {n} Meter","filter_gps_precision_between":"Zwischen {n1} und {n2} Metern","filter_gps_precision_morethan":"Mehr als {n} Meter","map_theme_gps":"Standortgenauigkeit"},"psv":{"twoFingers":"Nutze zwei Finger zum Navigieren","ctrlZoom":"Nutze Strg + Scrollen, um das Bild zu vergr\xf6\xdfern","loadError":"Das Panorama konnte nicht geladen werden"},"map":{"thumbnail":"Vorschau des markierten Fotos","not_public":"Nicht \xf6ffentlich sichtbar","loading":"Laden\u2026","slow_loading":"Die Karte wird nur langsam geladen und k\xf6nnte fehlerhaft erscheinen","map_data":"Kartendaten: {m}","more_panoramax":"Mehr \xfcber Panoramax erfahren"},"maplibre":{"GeolocateControl.FindMyLocation":"Meinen Standort finden","GeolocateControl.LocationNotAvailable":"Standort nicht verf\xfcgbar"}}')},389:ae=>{"use strict";ae.exports=JSON.parse('{"psv":{"twoFingers":"Use two fingers to navigate","ctrlZoom":"Use ctrl + scroll to zoom the image","loadError":"The panorama can\'t be loaded"},"maplibre":{"GeolocateControl.FindMyLocation":"Find my location","GeolocateControl.LocationNotAvailable":"Location not available"},"pnx":{"zoom":"Zoom","zoomOut":"Zoom out","zoomIn":"Zoom in","moveUp":"Move up","moveDown":"Move down","moveLeft":"Move left","moveRight":"Move right","moveMiddle":"Center view","expand":"Expand","expand_info":"Make the widget appear in full page","show_psv":"Show the picture viewer","show_map":"Show the map","minimize":"Hide this widget, you can show it again using button in bottom left corner","minimize_short":"Hide","options":"Options","filters":"Filters","layers":"Layers","search":"Search","search_empty":"No results found","search_address":"Search an address, city\u2026","search_user":"Search a username\u2026","share":"Share","share_links":"Links","share_page":"Link to this picture","share_image":"HD Image","share_rss":"RSS feed","share_rss_title":"RSS feed of new sequences in the currently visible map area","share_embed":"Embed on your website","share_embed_docs":"Read more about embed configuration","share_print":"Print","panoramax":"Panoramax","whats_panoramax":"Panoramax is the geo-commons for territories\' pictures.","copy":"Copy","copied":"Copied","error":"We have a problem\u2026","error_click":"Continue","error_retry":"Please retry later","sequence_next":"Next picture in sequence","sequence_play":"Play along this sequence","sequence_pause":"Pause sequence","sequence_prev":"Previous picture in sequence","sequence_more":"More play options","sequence_speed":"Player speed","legend_license":"License: {l}","legend_title":"Show details of picture","id":"iD","contribute_id":"Contribute to OpenStreetMap with iD editor","geo_uri":"External app","josm":"JOSM","josm_live":"Enable JOSM automatic sync on picture loading","loading_labels_serious":["\ud83d\uddfa\ufe0f Loading map data","\ud83d\udda5\ufe0f Querying API","\ud83d\uddbc\ufe0f Loading thumbnails","\ud83d\udd0d Analyzing EXIF metadata","\ud83c\udfd8\ufe0f 3D rendering","\ud83d\udcf7 Initializing 360\xb0 pictures","\ud83d\udfe0 Colour balancing","\ud83d\udcaf Computing Quality Score \xa9","\ud83d\udce1 Downloading updates","\ud83c\udf0d Fetching map tiles","\ud83d\udcf8 Processing shadows"],"loading_labels_fun":["\ud83e\udd8c Detecting deer crossing signs","\ud83d\ude98 Searching Panoramax Car \xa9","\u2615 Injecting caffeine","\ud83d\ude00 Smile, you\'re mapped!","\ud83d\udc08 Sharing cat pictures","\ud83d\ude34 Reducing procrastination","\ud83e\uded6 Brewing tea","\ud83d\udc27 Opening source code","\ud83d\ude87 Indexing Underground stations","\ud83e\uddf9 Metadata cleanup","\ud83d\ude92 Sending fire station photos","\ud83d\udeb2 Greenways update","\ud83d\ude89 Station platform walkthrough","\ud83d\udef0\ufe0f Searching satellites","\ud83d\udc65 Writing personas","\ud83d\udc1f Locating chip shops","\ud83e\uddd1\u200d\ud83d\udcbb Debugging interface","\ud83d\udcc8 Incrementing statistics","\ud83e\udd16 Learning semantics","\ud83c\udfa8 Interface redesign","\ud83d\udcc5 Planning photo-mapping-parties","\ud83e\uddc0 Maturing cheddars","\ud83c\udf04 Calculating Cornish sunshine","\ud83c\udf0a Measuring the high tides"],"error_psv":"Photo Sphere Viewer is not loading properly","error_pic":"Requested picture wasn\'t found","error_nopic":"No picture available at given position","error_api":"The pictures server is not available","error_webgl":"WebGL is not supported by your browser","error_josm":"JOSM doesn\'t respond, is it running and is remote enabled?","error_api_compatibility":"The pictures server is not compatible with this viewer version","filter_date":"Date","filter_date_1month":"1 month","filter_date_6months":"6 months","filter_date_1year":"1 year","filter_user":"User","filter_user_mypics":"My pictures","filter_picture":"Picture type","filter_zoom_in":"Zoom-in the map to see this filter","picture_all":"All","picture_flat":"Classic","picture_360":"360\xb0","picture_flat_long":"Classic picture","picture_360_long":"Panoramic picture","filter_qualityscore":"Quality score","filter_qualityscore_help":"Click to enable or disable","qualityscore_title":"About the quality score","qualityscore_doc_1":"Panoramax offers a Quality Score for each picture. It allows easy map filtering and comprehensive display of high-quality pictures availability.","qualityscore_doc_2":"The grade is shown to users as a A/B/C/D/E score (A is the best, E the worst), and shown graphically through this scale:","qualityscore_doc_3":"It is computed based on GPS precision and picture resolution. A professional system will have an A-rating, a 360\xb0 action camera will have a B-rating, and a smartphone will be C/D/E-rated.","qualityscore_doc_link":"Know more about the Quality Score","filter_gps_precision":"Location precision","filter_gps_precision_lessthan":"Less than {n} meters","filter_gps_precision_between":"Between {n1} and {n2} meters","filter_gps_precision_morethan":"More than {n} meters","map_background":"Map background","map_background_aerial":"Aerial","map_background_streets":"Streets","map_theme":"Map theme","map_theme_default":"Classic","map_theme_age":"Capture date","map_theme_age_1":"> 2 years","map_theme_age_2":"< 2 years","map_theme_age_3":"< 1 year","map_theme_age_4":"< 1 month","map_theme_type":"Camera type","map_theme_score":"Quality score","map_theme_gps":"Location precision","contrast":"Enable higher image contrast","metadata":"Picture metadata","metadata_summary":"Summary","metadata_general_copy_id":"Copy ID","metadata_general_copy_picid":"Copy picture ID","metadata_general_picid":"Picture","metadata_general_seqid":"Sequence","metadata_general_picid_link":"Go to JSON description of the picture","metadata_general_seqid_link":"Go to JSON description of the sequence","metadata_general_author":"Author","metadata_general_license":"License","metadata_general_license_link":"See the full licence description","metadata_general_date":"Capture date","metadata_general_instance":"Origin instance","metadata_camera":"Camera","metadata_camera_make":"Make","metadata_camera_model":"Model","metadata_camera_type":"Type","metadata_camera_resolution":"Resolution","metadata_camera_focal_length":"Focal length","metadata_location":"Position","metadata_location_coordinates":"Coordinates (longitude, latitude)","metadata_location_orientation":"Direction","metadata_location_precision":"Positioning precision","metadata_location_copy":"Copy {v}","metadata_location_copy_more":"More coordinates copy options","metadata_quality":"Quality","metadata_quality_help":"Know more about Quality Score","metadata_quality_score":"Global score","metadata_quality_gps_score":"Positioning score","metadata_quality_resolution_score":"Resolution score","metadata_quality_missing":"no value set in picture","metadata_exif":"EXIF","metadata_exif_name":"Tag","metadata_exif_value":"Value","metadata_exif_doc":"Docs for EXIF tags","metadata_exif_doc_title":"Go to Exiv2 documentation to have full details on EXIF and XMP tags definitions","semantics_title":"Tags","semantics_tags":"{nb} tags","semantics_features":"Picture features","semantics_features_none":"No feature has been drawn in this picture yet.","semantics_features_default_title":"Tag {nb}","semantics_features_subtitle":"{nb} associated properties","semantics_annotation_tooltip":"Click to see details","semantics_show_all_tags":"Show all tags","semantics_hide_all_tags":"Hide all tags","semantics_key":"Key","semantics_value":"Value","semantics_sequence_tags":"Sequence tag","semantics_picture_tags":"Picture tag","semantics_annotation_tags":"Object tag","semantics_doc":"Help","semantics_doc_title":"About tags","semantics_doc_info1":"Give context around a picture using tags. You can tag it as captured by car with the transport=car tag.","semantics_doc_info2":"You can draw objects in the picture as well: road signs, urban equipments\u2026 Mark what you see using existing tags. You can create your own ones as well if necessary.","semantics_doc_info3":"Some objects are automatically detected with AI: quality is not guaranteed.","semantics_doc_link":"Know more about tags","semantics_key_doc":"Know more about this key","semantics_value_doc":"Know more about this tag","semantics_qualifiers":"Qualifiers","semantics_show_annotations":"Display picture features","semantics_hide_annotations":"Hide picture features","semantics_zero_annotations":"No features drawn on this picture","semantics_add_annotation":"Add a new tag","semantics_draw_annotation":"You can draw the object you want to add over the picture (Optional).","semantics_erase_annotation":"Erase drawn feature","semantics_delete_annotation":"Delete this feature","semantics_delete_annotation_confirm":"Do you really want to delete this tag ?","semantics_wikidata_properties":{"P31":"instance of","P279":"subclass of","P361":"part of"},"semantics_editor_error":"The syntax is invalid. Your tags may look like:\\nkey=value\\nprefix|key=value\\nprefix|key[qualif_key=qualif_val]=value\\n\\nMax key length is 256 characters, max value length 2048 characters.","semantics_editor_example":"key=value\\nprefix|key=value","semantics_edit":"Edit attributes","semantics_save":"Save your changes","semantics_undo":"Cancel your edits","semantics_send_fail":"Unable to save your changes, please try again later","semantics_login_needed":"In order to edit picture tags or features, you need to log in on Panoramax {n} instance. Do you want to log-in ?","report":"Report","report_auth":"This report will be sent using your account \\"{a}\\"","report_nature_label":"Cause of the issue","report_nature":{"":"Select the nature of issue\u2026","blur_missing":"A person\'s face or car license plate is visible","blur_excess":"An unnecessary blur was applied to an object","inappropriate":"Picture is inappropriate (unrelated, nudity\u2026)","privacy":"A private path or property is visible","picture_low_quality":"Image is low quality","mislocated":"Picture is poorly positioned on map","copyright":"Picture infringes copyright","other":"Any other kind of issue"},"report_whole_sequence":"This concerns the entire sequence","report_details":"Additional details","report_details_placeholder":"Optionally, you can add details about the issue","report_email":"Your email","report_email_placeholder":"Optional","report_submit":"Submit","report_wait":"Sending report\u2026","report_success":"Report was sent successfully. It will be reviewed as soon as possible.","report_failure":"An error occurred when creating report: {e}. Please try again later."},"map":{"loading":"Loading\u2026","thumbnail":"Thumbnail of hovered picture","not_public":"Not publicly visible","slow_loading":"Map is slow to load and could appear broken","map_data":"Map based on {m}","more_panoramax":"Discover more about Panoramax"}}')},9946:ae=>{"use strict";ae.exports=JSON.parse('{"psv":{"twoFingers":"Uzu du fingrojn por navigi","ctrlZoom":"Uzu ctrl + rulumo por zomi la bildon","loadError":"La bildo ne povas esti \u015dar\u011dita"},"pnx":{"zoom":"Zomo","zoomOut":"Malzomo","zoomIn":"Zomi","moveUp":"Movi supren","moveDown":"Movi malsupren","moveLeft":"Movi maldekstren","moveRight":"Movi dekstren","moveMiddle":"Centri vido","expand":"Pligrandigi","expand_info":"Aperigu la fenestra\u0135on en plena pa\u011do","show_psv":"Montri la bildspektilo","show_map":"Montri la mapo","minimize":"Maski la fenestra\u0135o, vu povas montri \u011din denove kun la butono en malsupra maldekstra angulo","sequence_prev":"Anta\u016da foto en la sekvenco","sequence_more":"Pli da ludopcioj","sequence_speed":"Rapideco de legado","sequence_next":"Sekva foto en la sekvenco","sequence_play":"Foliumi \u0109i tiun sinsekvon","sequence_pause":"Pa\u016dzi la sekvenco","copy":"Kopii","copied":"Kopiita","error":"Ni havas problemon\u2026","error_click":"Kontinui","error_retry":"Bonvolu reprovi poste","search_address":"Ser\u0109i adreson, urbon\u2026","filters":"Filtriloj","layers":"Tavoloj","search":"Ser\u0109i","share_embed_docs":"Pli pri enigito sur via retpa\u011daro","search_empty":"Neniu rezulto trovita","search_user":"Ser\u0109i uzantnomon\u2026","share":"Kunhavigi","share_links":"Ligiloj","share_page":"Ligilo de la foto","share_image":"HD bildo","share_rss":"RSS abonfluo","share_rss_title":"RSS abonfluo de la novaj sekvecoj en la nuntempe videbla mapzono","share_embed":"Enigita en via retpa\u011daro","share_print":"Presi","edit_osm":"Modifi OSM","legend_license":"Rajtigilo : {l}","josm_live":"Ebligas a\u016dtomatan JOSM-sinkronigon dum \u015dar\u011do de bildo","loading_labels_serious":["\ud83d\uddfa\ufe0f \u015cargo de la bazmapon","\ud83d\udda5\ufe0f API demandado","\ud83d\uddbc\ufe0f \u015car\u011do de miniaturoj","\ud83d\udd0d Analizo de EXIF-metadatumoj","\ud83c\udfd8\ufe0f 3D-rendumo","\ud83d\udcf7 Inico de 360\xb0-bildoj","\ud83d\udfe0 Kolora ekvilibrigo","\ud83d\udcaf Kalkulo de kvalitpoentaro \xa9","\ud83d\udce1 El\u015dutante \u011disdatoj","\ud83c\udf0d Reakirante mapkaheloj","\ud83d\udcf8 Traktadante ombroj"],"legend_title":"Montri la detaloj de la bildo","error_api":"La bildservilo ne estas disponebla","error_josm":"JOSM ne respondis. \u0108u \u011di funkcias kaj la regilo estas \u015daltita?","error_webgl":"WebGL ne estas subtenata per via retumilo","loading_labels_fun":["\ud83e\udd8c Detekto de cervinaj vojmontriloj","\ud83d\ude98 Ser\u0109o de Panoramax-a\u016dto \xa9","\u2615 Injekto de kafeino","\ud83d\ude00 Ridetu, vi estas mapita!","\ud83d\udc08 Kunhavigo de katbildoj","\ud83d\ude34 Redukto de prokrastado","\ud83d\udcd6 Lernado de Esperanto","\ud83d\udc27 Malfermo de fontkodo","\ud83d\ude87 Indekso de subteraj stacioj","\ud83e\uddf9 Purigo de metadatumoj","\ud83d\ude92 Sendado de fotoj de fajrostacioj","\ud83d\udeb2 \u011cisdatigo de verdaj vojoj","\ud83d\ude89 Promenado tra stacioplatformoj","\ud83d\udef0\ufe0f Ser\u0109o de satelitoj","\ud83d\udc65 Verkado de roluloj","\u2747\ufe0f Lokalizo de la Esperanto-flagoj","\ud83e\uddd1\u200d\ud83d\udcbb Sencimigado de la interfaco","\ud83d\udcc8 Alkrementi de la statistikoj","\ud83e\udd16 Lernadante semantiko","\ud83c\udfa8 Interfaca redezajno","\ud83d\udcc5 Planante fota-mapa-festoj","\ud83e\uddc0 Finmaturigo de la froma\u011doj","\ud83c\udf04 Kalkulante la sunbrilon de la Saharo","\ud83c\udf0a Mezurado de la altaj tajdoj"],"picture_360":"360\xb0","picture_flat":"Klasika","report_nature_label":"Speco de problemo","report_nature":{"":"Elektu la specon de problemo\u2026","blur_missing":"Viza\u011do a\u016d numerplato estas videbla","copyright":"La bildo malobeas kopirajton","blur_excess":"Objekto kiu ne bezonis malklari\u011don estas malklarigita","inappropriate":"La bildo estas neta\u016dga (nevera, nudeco...)","privacy":"Privata vojo a\u016d poseda\u0135o estas videbla","picture_low_quality":"La bildo estas de tre malbona kvalito","mislocated":"La bildo estas malbone poziciigita sur la mapo","other":"\u0108ia alia speco de problemo"},"report":"Raporti","report_auth":"\u0108i tiu raporto estos sendita per via konto \\"{a}\\"","filter_date":"Dato","filter_user_mypics":"Miaj fotoj","options":"Opcioj","error_api_compatibility":"La fotoservilo ne kongruas kun \u0109i tiu spektilo","filter_qualityscore":"Kvalitpoentaro","filter_qualityscore_help":"Alllaku por aktivigi a\u016d mal\u015dalti","map_theme_age":"Dato de fotado","map_theme_age_1":"> 2 jaroj","map_theme_age_2":"< 2 jaroj","map_theme_age_3":"< 1 jaro","map_theme_age_4":"< 1 monato","map_theme_score":"Kvalitpoentaro","metadata":"Metadatenoj de la bildo","map_theme_type":"Fotiltipo","metadata_general_seqid":"Sekvenco","metadata_camera_resolution":"Difino","metadata_quality_resolution_score":"Rezolucia poentaro","error_psv":"Foto-Sfera Spektilo ne \u015dar\u011di\u011das \u011duste","error_pic":"La petita bildo ne estis trovita","error_nopic":"Neniu bildo disponeblas \u0109e la donita pozicio","filter_user":"Uzanto","map_theme_default":"Klasika","filter_date_1month":"1 monato","filter_date_1year":"1 jaro","contrast":"Pliigi bildkontraston","metadata_general_picid":"Foto","filter_picture":"Bilda tipo","filter_zoom_in":"Zomu en la mapo por vidi tiun filtrilon","map_background":"Bazmapo","map_background_aerial":"Aera","map_background_streets":"Stratoj","map_theme":"Mapa etoso","metadata_general_picid_link":"Iru al la JSON-priskribo de la foto","metadata_general_seqid_link":"Iru al la JSON-priskribo de la sekvenco","metadata_general_author":"A\u016dtoro","metadata_general_license":"Rajtigilo","metadata_general_license_link":"Vidi la kompletan rajtigilon en la priskribo","metadata_general_date":"Dato de la fotado","metadata_camera":"Fotilo","metadata_camera_make":"Faristo","metadata_camera_model":"\u015cablono","metadata_camera_type":"Tipo","metadata_camera_focal_length":"Fokuslongo","metadata_location":"Pozicio","metadata_location_longitude":"Longitudo","metadata_location_latitude":"Latitudo","metadata_location_orientation":"Direkto","metadata_location_precision":"Pozicia precizeco","metadata_quality":"Kvalito","metadata_quality_help":"Pli pri la Kvalitapoentaro","metadata_quality_score":"Malloka poentaro","metadata_quality_gps_score":"Pozicia poentaro","metadata_quality_missing":"neniu valoro en la bildo","metadata_exif":"EXIF","metadata_exif_name":"Etikedo","metadata_exif_value":"Valoro","report_whole_sequence":"\u0108i tio koncernas la tutan sekvencon","report_details":"Aliaj detaloj","report_email":"Via retpo\u015dto","report_submit":"Sendi","report_wait":"Sendante raporton\u2026","report_success":"La raporto estis sukcese sendita. \u011ci estos reviziita balda\u016d.","report_details_placeholder":"Opcie, vi povas aldoni detalojn pri la problemo","report_email_placeholder":"Opcie","report_failure":"Eraro okazis dum kreo de la raporto: {e}. Bonvolu provi denove poste.","qualityscore_doc_3":"\u011ci estas kalkulita surbaze de GPS-precizeco kaj bildrezolucio. Profesiaj sistemoj havos A-poentaron, 360\xb0-akcifotilo havos B-poentaron, kaj po\u015dtelefono havos C/D/E-poentaron.","qualityscore_title":"Pri la kvalita poentaro","qualityscore_doc_1":"Panoramax ofertas Kvalitan Poentaron por \u0109iu bildo. \u011ci ebligas facilan mapfiltradon kaj ampleksan vidigon de la havebleco de altkvalitaj bildoj.","qualityscore_doc_link":"Pli da detaloj pri la kalkulo de la Kvalita Poentaro estas disponeblaj en nia dokumentado","minimize_short":"Maski","qualityscore_doc_2":"La poentaro estas montrita al uzantoj kiel litero A/B/C/D/E (A estas la plej bona, E la plej malbona) kaj grafike prezentita per \u0109i tiu skalo:","id":"iD","josm":"JOSM","contribute_id":"Kontribuu al OpenStreetMap kun iD-modifilo","filter_date_6months":"6 monatoj","picture_all":"\u0108iuj","picture_flat_long":"Klasika foto","picture_360_long":"Panorama foto","metadata_summary":"Resumo","metadata_general_copy_id":"Kopii la ID-on","metadata_general_copy_picid":"Kopii la fotan ID-on","metadata_general_instance":"Origina instanco","geo_uri":"Ekseteraj aplika\u0135oj","semantics_title":"Etikedoj","semantics_tags":"{nb} etikedoj","semantics_features":"Detektitaj objektoj","semantics_features_none":"No objekto estis ankora\u016d detektita a\u016d prinotita en \u0109i tiu foto.","semantics_features_default_title":"Objekto #{nb}","metadata_exif_doc":"Dokumentoj por EXIF-etikedoj","metadata_exif_doc_title":"Iru al la dokumentaro de Exiv2 por havi plenajn detalojn pri difinoj de EXIF kaj XMP-etikedoj","metadata_location_coordinates":"Koordinatoj (longitudo, latitudo)","metadata_location_copy":"Kopii {v}","metadata_location_copy_more":"Pli da ebloj por kopii koordinatojn","whats_panoramax":"Panoramax estas la geokomuna\u0135o por teritoriaj fotoj.","semantics_features_subtitle":"{nb} asociitaj atributoj","semantics_tags_picture_none":"Ankora\u016d neniuj atributoj estas difinitaj por \u0109i tiu foto.","semantics_hide_all_tags":"Maski la atributojn","semantics_key":"\u015closilo","semantics_value":"Valoro","semantics_show_all_tags":"Vidi \u0109iujn atributojn","semantics_tags_picture":"Foto-atributoj","semantics_value_doc":"Lernu pli pri \u0109i tiu atributo","semantics_qualifiers":"Kvalifikiloj","semantics_hide_annotations":"Maski bildajn komentojn","semantics_wikidata_properties":{"P279":"subklaso de","P361":"parto de","P31":"instanco de"},"share_picture":"Foto","semantics_annotation_tooltip":"Alklaku por vidi la detalojn","semantics_show_annotations":"Montri bildajn komentojn","semantics_key_doc":"Lernu pli pri \u0109i tiu \u015dlosilo"},"maplibre":{"GeolocateControl.FindMyLocation":"Trovi mian pozicion","GeolocateControl.LocationNotAvailable":"Loko ne disponeblas"},"map":{"slow_loading":"La mapo \u015dar\u011das malrapide kaj povus aperi rompi\u011dinta","loading":"\u015car\u011danto\u2026","thumbnail":"Miniaturo de la surflikta bildo","not_public":"Ne publike videbla","more_panoramax":"Malkovri pli pri Panoramax","map_data":"Kartaj datumoj : {m}"}}')},8302:ae=>{"use strict";ae.exports=JSON.parse('{"pnx":{"report_auth":"La denuncia se enviar\xe1 usando tu cuenta \xab{a}\xbb","report":"Denunciar imagen","report_nature_label":"Tipo de problema","report_nature":{"":"Selecciona el tipo de problema\u2026","blur_missing":"Se ve el rostro de una persona, o una matr\xedcula","blur_excess":"Est\xe1 borroso un objeto que no hac\xeda falta ocultar","inappropriate":"La imagen no es apropiada (irrelevante, desnudez, \u2026)","privacy":"Se ve un camino privado, o una propiedad privada","mislocated":"La localizaci\xf3n de la imagen en el mapa no es correcta","picture_low_quality":"La calidad de la imagen es pobre","copyright":"La imagen infringe derechos de autor","other":"Otro tipo de problema"},"sequence_more":"M\xe1s opciones de reproducci\xf3n","sequence_speed":"Velocidad de reproducci\xf3n","legend_license":"Licencia: {l}","edit_osm":"Editar OpenStreetMap","id":"iD","josm":"JOSM","josm_live":"Activar la sincronizaci\xf3n autom\xe1tica de JOSM cuando se carga una imagen","loading_labels_serious":["\ud83d\uddfa\ufe0f Cargando datos del mapa","\ud83d\udda5\ufe0f Consultando la API","\ud83d\uddbc\ufe0f Cargando vistas previas","\ud83d\udd0d Analizando metadatos EXIF","\ud83c\udfd8\ufe0f Renderizado 3D","\ud83d\udcf7 Preparando im\xe1genes 360\xb0","\ud83d\udfe0 Ajustando balance de color","\ud83d\udcaf C\xe1lculo del nivel de calidad \xa9"],"metadata":"Metadatos de la imagen","map_theme_type":"Tipo de c\xe1mara","contrast":"Dar m\xe1s contraste a la imagen","zoom":"Acercar/alejar","zoomOut":"Alejar","map_background_streets":"Calles","loading_labels_fun":["\ud83e\udd8c Detectando paneles de cruce de alces","\ud83d\ude98 Buscando el Coche Panoramax \xa9","\u2615 Inyectando cafe\xedna","\ud83d\ude00 \xa1Sonr\xede, est\xe1s siendo mapeado!","\ud83d\udc08 Compartiendo fotos de gatos","\ud83d\ude34 Reduciendo la procrastinaci\xf3n","\ud83e\uded6 Preparando el t\xe9","\ud83d\udc27 Abriendo el c\xf3digo fuente","\ud83d\ude87 Indexando estaciones del metro","\ud83e\uddf9 Limpieza de metadatos","\ud83d\ude92 Enviando fotos de estaciones de bomberos","\ud83d\udeb2 Actualizando v\xedas verdes","\ud83d\ude89 Paseo por el and\xe9n de la estaci\xf3n","\ud83d\udef0\ufe0f Buscando sat\xe9lites","\ud83d\udc65 Describiendo tipolog\xedas de persona","\ud83d\udc1f Localizando tiendas de fish & chips","\ud83e\uddd1\u200d\ud83d\udcbb Buscando gazapos de la interfaz","\ud83d\udcc8 Incrementando estad\xedsticas"],"metadata_general_license_link":"Ir a la descripci\xf3n completa de la licencia","metadata_general_picid":"Identificador de la imagen","metadata_general_license":"Licencia","report_details_placeholder":"Opcional; puedes a\xf1adir m\xe1s detalles sobre el problema y por qu\xe9 te preocupa","expand":"Expandir","expand_info":"Mostrar el elemento ocupando toda la p\xe1gina","show_psv":"Mostrar el visor de im\xe1genes","show_map":"Mostrar el mapa","zoomIn":"Acercar","moveUp":"Desplazar hacia arriba","moveDown":"Desplazar hacia abajo","moveLeft":"Desplazar hacia la izquierda","moveRight":"Desplazar hacia la derecha","moveMiddle":"Centrar la vista","minimize":"Esconder este elemento. Para mostrarlo de nuevo, pulsa el bot\xf3n en la esquina inferior izquierda","options":"Opciones","filters":"Filtros","layers":"Capas","search":"Buscar","search_empty":"No se encontraron resultados","search_address":"Buscar una direcci\xf3n, una ciudad, \u2026","search_user":"Buscar un usuario\u2026","share":"Compartir","share_links":"Enlaces","share_page":"Enlace a esta p\xe1gina","share_image":"Imagen de alta calidad","share_rss":"Flujo RSS","share_rss_title":"Flujo RSS de las nuevas secuencias en el \xe1rea visible del mapa","share_embed":"Incrustar en tu p\xe1gina web","share_embed_docs":"M\xe1s informaci\xf3n sobre c\xf3mo configurar el incrustado","share_print":"Imprimir","copy":"Copiar","copied":"Copiado","error":"Hay un problema\u2026","sequence_next":"Siguiente imagen de la secuencia","sequence_play":"Reproducir esta secuencia","sequence_pause":"Pausar la secuencia","sequence_prev":"Imagen anterior de la secuencia","error_click":"Continuar","error_retry":"Por favor, int\xe9ntalo m\xe1s tarde","error_psv":"El visor de fotos esf\xe9ricas no se carga correctamente","error_pic":"No se encuentra la imagen que quer\xedamos","error_nopic":"No hay im\xe1genes para la posici\xf3n dada","error_api":"El servidor de im\xe1genes no est\xe1 disponible","error_webgl":"Este navegador no admite WebGL","error_josm":"JOSM no responde. \xbfEst\xe1 abierto, y admite el modo de Control Remoto?","error_api_compatibility":"El servidor de im\xe1genes no es compatible con esta versi\xf3n del visor","filter_date":"Fecha","filter_user":"Usuario","filter_picture":"Tipo de imagen","filter_zoom_in":"Ac\xe9rcate para poder ver filtros","picture_flat":"Cl\xe1sico","picture_360":"360\xb0","filter_camera_model":"Por modelo de c\xe1mara","map_background":"Fondo de mapa","map_background_aerial":"Vista a\xe9rea","map_theme":"Tema de mapa","map_theme_default":"Cl\xe1sico","map_theme_age":"Fecha de toma de imagen","map_theme_age_1":"M\xe1s de dos a\xf1os","map_theme_age_2":"Menos de dos a\xf1os","map_theme_age_3":"Menos de un a\xf1o","map_theme_age_4":"Menos de un mes","metadata_general_seqid":"Identificador de la secuencia","metadata_general_picid_link":"Ir a la descripci\xf3n de la imagen en formato JSON","metadata_general_seqid_link":"Ir a la descripci\xf3n de la secuencia en formato JSON","metadata_general_author":"Autor","metadata_general_date":"Fecha de toma de imagen","metadata_camera":"C\xe1mara","metadata_camera_make":"Marca","metadata_camera_model":"Modelo","metadata_camera_type":"Tipo","metadata_camera_focal_length":"Distancia focal","metadata_location":"Localizaci\xf3n","metadata_location_longitude":"Longitud","metadata_location_latitude":"Latitud","metadata_location_orientation":"Orientaci\xf3n","metadata_location_precision":"Precisi\xf3n de la localizaci\xf3n","metadata_exif":"EXIF / XMP","metadata_exif_name":"Etiqueta","metadata_exif_value":"Valor","report_whole_sequence":"El problema afecta a la secuencia entera","report_details":"M\xe1s detalles","report_email":"Tu direcci\xf3n de correo electr\xf3nico","report_email_placeholder":"Opcional","report_submit":"Enviar","report_success":"La denuncia se ha enviado correctamente. Ser\xe1 revisada lo antes posible.","report_failure":"Ocurri\xf3 un error al crear la denuncia: {e}. Por favor, int\xe9ntalo m\xe1s tarde.","map_theme_score":"Nivel de calidad","filter_qualityscore":"Nivel de calidad","filter_qualityscore_help":"Haga clic para habilitar o deshabilitar","legend_title":"Ver detalles de la imagen","metadata_camera_resolution":"Resoluci\xf3n","metadata_quality":"Puntuaci\xf3n de calidad","metadata_quality_help":"M\xe1s informaci\xf3n sobre el nivel de calidad","metadata_quality_score":"Valoraci\xf3n general","metadata_quality_gps_score":"Puntuaci\xf3n de posicionamiento","metadata_quality_resolution_score":"Puntuaci\xf3n de resoluci\xf3n","metadata_quality_missing":"no hay informaci\xf3n en la imagen","report_wait":"Env\xedo del informe\u2026"},"psv":{"ctrlZoom":"Utiliza Control+rueda de desplazamiento para acercar/alejar","loadError":"Este panorama no se puede cargar","twoFingers":"Desplaza el mapa con dos dedos"},"maplibre":{"GeolocateControl.FindMyLocation":"Local\xedzame","GeolocateControl.LocationNotAvailable":"Localizaci\xf3n no disponible"},"map":{"loading":"Cargando\u2026","thumbnail":"Vista previa de la imagen bajo el cursor","not_public":"No es visible p\xfablicamente","slow_loading":"La mapa tarda mucho en cargarse y puede parecer rota"}}')},5222:ae=>{"use strict";ae.exports=JSON.parse('{"psv":{"twoFingers":"Utilisez deux doigts pour vous d\xe9placer","ctrlZoom":"Utilisez ctrl + scroll pour zoomer dans l\'image","loadError":"L\'image ne peut pas \xeatre charg\xe9e"},"maplibre":{"GeolocateControl.FindMyLocation":"Afficher ma position","GeolocateControl.LocationNotAvailable":"GPS non-disponible"},"pnx":{"zoom":"Zoom","zoomOut":"D\xe9zoomer","zoomIn":"Zoomer","moveUp":"Vers le haut","moveDown":"Vers le bas","moveLeft":"Vers la gauche","moveRight":"Vers la droite","moveMiddle":"Centrer la vue","expand":"Agrandir","expand_info":"Faire appara\xeetre ce widget en pleine page","show_psv":"Afficher la visionneuse de photos","show_map":"Afficher la carte","minimize":"Masquer ce widget, vous pouvez l\'afficher de nouveau gr\xe2ce au bouton dans le coin en bas \xe0 gauche","minimize_short":"Masquer","options":"Options","filters":"Filtres","layers":"Calques","search":"Rechercher","search_empty":"Aucun r\xe9sultat","search_address":"Rechercher une adresse, ville\u2026","search_user":"Rechercher un nom d\'utilisateur\u2026","share":"Partager","share_links":"Liens utiles","share_page":"Lien de la photo","share_image":"Image HD","share_rss":"Flux RSS","share_rss_title":"Flux RSS des nouvelles s\xe9quences dans la zone visible sur la carte","share_embed":"Int\xe9gration sur votre site","share_embed_docs":"D\xe9couvrir plus de possibilit\xe9s pour l\'int\xe9gration sur votre site","share_print":"Imprimer","panoramax":"Panoramax","whats_panoramax":"Panoramax est le g\xe9ocommun des photos des territoires.","copy":"Copier","copied":"Copi\xe9","error":"On a un probl\xe8me\u2026","error_click":"Continuer","error_retry":"Merci de r\xe9essayer plus tard","sequence_next":"Photo suivante dans la s\xe9quence","sequence_play":"Parcourir cette s\xe9quence","sequence_pause":"Mettre en pause la s\xe9quence","sequence_prev":"Photo pr\xe9c\xe9dente dans la s\xe9quence","sequence_more":"Plus d\'options de lecture","sequence_speed":"Vitesse de lecture","legend_license":"Licence : {l}","legend_title":"Afficher les d\xe9tails de l\'image","id":"iD","contribute_id":"Contribuez \xe0 OpenStreetMap avec l\'\xe9diteur iD","geo_uri":"App externe","josm":"JOSM","josm_live":"Active la synchronisation automatique de JOSM lors du chargement d\'une photo","loading_labels_serious":["\ud83d\uddfa\ufe0f Chargement du fond de carte","\ud83d\udda5\ufe0f Interrogation de l\'API","\ud83d\uddbc\ufe0f Chargement des miniatures","\ud83d\udd0d Analyse des m\xe9tadonn\xe9es EXIF","\ud83c\udfd8\ufe0f Cr\xe9ation du rendu 3D","\ud83d\udcf7 Initialisation des vues 360\xb0","\ud83d\udfe0 \xc9quilibrage des couleurs","\ud83d\udcaf Calcul du score qualit\xe9 \xa9","\ud83d\udce1 T\xe9l\xe9chargement des mises \xe0 jour","\ud83c\udf0d R\xe9cup\xe9ration des tuiles","\ud83d\udcf8 Traitement des ombres"],"loading_labels_fun":["\ud83e\udd8c D\xe9tection des panneaux biche","\ud83d\ude98 Recherche de la Panoramax Car \xa9","\u2615 Injection de caf\xe9ine","\ud83d\ude00 Souriez, vous \xeates mapp\xe9s !","\ud83d\udc08 Partage de photos de chats","\ud83d\ude34 R\xe9duction de la procrastination","\ud83c\uddf7\ud83c\uddea Chargement : 974%","\ud83d\udc27 Ouverture du code source","\ud83e\udd81 Indexation des traboules","\ud83e\uddf9 Nettoyage des m\xe9tadonn\xe9es","\ud83d\ude92 Envoi des photos du SDIS","\ud83d\udeb2 Mise \xe0 jour des voies vertes","\ud83d\ude89 Remont\xe9e des quais de gare","\ud83d\udef0\ufe0f Recherche de satellites","\ud83d\udc65 \xc9criture des personas","\ud83e\udd5e Localisation des cr\xeaperies","\ud83e\uddd1\u200d\ud83d\udcbb D\xe9boguage de l\'interface","\ud83d\udcc8 Incr\xe9mentation des statistiques","\ud83e\udd16 Apprentissage de la s\xe9mantique","\ud83c\udfa8 Redesign de l\'interface","\ud83d\udcc5 Planification des photos-carto-parties","\ud83e\uddc0 Affinage des fromages","\ud83c\udf04 Calcul de l\'ensoleillement corse","\ud83c\udf0a Mesure des grandes mar\xe9es"],"error_psv":"Photo Sphere Viewer ne s\'est pas charg\xe9 correctement","error_pic":"La photo demand\xe9e est introuvable","error_nopic":"Aucune photo disponible autour de la localisation recherch\xe9e","error_api":"Le serveur de photos n\'est pas disponible","error_webgl":"WebGL n\'est pas support\xe9 par votre navigateur","error_josm":"JOSM n\'a pas r\xe9pondu, est-il bien lanc\xe9 et la t\xe9l\xe9commande activ\xe9e ?","error_api_compatibility":"Le serveur de photos n\'est pas compatible avec cette visionneuse","filter_date":"Date","filter_date_1month":"1 mois","filter_date_6months":"6 mois","filter_date_1year":"1 an","filter_user":"Utilisateur","filter_user_mypics":"Mes photos","filter_picture":"Type d\'image","picture_all":"Tout","picture_flat":"Classique","picture_360":"360\xb0","picture_flat_long":"Photo classique","picture_360_long":"Photo panoramique","filter_qualityscore":"Score de qualit\xe9","filter_qualityscore_help":"Cliquez pour activer ou d\xe9sactiver","qualityscore_title":"\xc0 propos du score de qualit\xe9","qualityscore_doc_1":"Panoramax propose un Score de Qualit\xe9 pour chacune de ses photos. Cela facilite le filtre et la recherche de photos de bonne qualit\xe9 sur la carte.","qualityscore_doc_2":"Le score est affich\xe9 sous la forme d\'une lettre A/B/C/D/E (A \xe9tant le meilleur, E le moins bon), et visualisable gr\xe2ce \xe0 cette \xe9chelle :","qualityscore_doc_3":"Il est calcul\xe9 en fonction de la pr\xe9cision du GPS ainsi que la r\xe9solution de la photo. Un mat\xe9riel professionnel aura une note de A, une cam\xe9ra sportive 360\xb0 une note de B, et un smartphone une note de C \xe0 E.","qualityscore_doc_link":"En savoir plus sur le Score de Qualit\xe9","filter_zoom_in":"Zoomez la carte pour voir ce filtre","filter_gps_precision":"Pr\xe9cision du positionnement","filter_gps_precision_lessthan":"Moins de {n} m\xe8tres","filter_gps_precision_between":"Entre {n1} et {n2} m\xe8tres","filter_gps_precision_morethan":"Plus de {n} m\xe8tres","map_background":"Fond de carte","map_background_aerial":"Satellite","map_background_streets":"Plan","map_theme":"Rendu de carte","map_theme_default":"Classique","map_theme_age":"Date de prise de vue","map_theme_age_1":"> 2 ans","map_theme_age_2":"< 2 ans","map_theme_age_3":"< 1 an","map_theme_age_4":"< 1 mois","map_theme_type":"Type de cam\xe9ra","map_theme_score":"Score de qualit\xe9","map_theme_gps":"Pr\xe9cision du positionnement","contrast":"Augmenter le contraste de l\'image","metadata":"M\xe9tadonn\xe9es de la photo","metadata_summary":"R\xe9sum\xe9","metadata_general_copy_id":"Copier l\'ID","metadata_general_copy_picid":"Copier l\'ID de photo","metadata_general_picid":"Photo","metadata_general_seqid":"S\xe9quence","metadata_general_picid_link":"Aller au descriptif JSON de la photo","metadata_general_seqid_link":"Aller au descriptif JSON de la s\xe9quence","metadata_general_author":"Auteur","metadata_general_license":"Licence","metadata_general_license_link":"Voir la description compl\xe8te de la licence","metadata_general_date":"Date de prise de vue","metadata_general_instance":"Instance d\'origine","metadata_camera":"Appareil","metadata_camera_make":"Fabricant","metadata_camera_model":"Mod\xe8le","metadata_camera_type":"Type","metadata_camera_resolution":"R\xe9solution","metadata_camera_focal_length":"Longueur focale","metadata_location":"Position","metadata_location_coordinates":"Coordonn\xe9es (longitude, latitude)","metadata_location_orientation":"Direction","metadata_location_precision":"Pr\xe9cision du positionnement","metadata_location_copy":"Copier {v}","metadata_location_copy_more":"Copier d\'autres formats de coordonn\xe9es","metadata_quality":"Qualit\xe9","metadata_quality_help":"En savoir plus sur le score de qualit\xe9","metadata_quality_score":"Note globale","metadata_quality_gps_score":"Note du positionnement","metadata_quality_resolution_score":"Note de la r\xe9solution","metadata_quality_missing":"pas d\'info dans l\'image","metadata_exif":"EXIF","metadata_exif_name":"Balise","metadata_exif_value":"Valeur","metadata_exif_doc":"Doc des attributs EXIF","metadata_exif_doc_title":"Ac\xe9\xe9der \xe0 la doc Exiv2 pour en savoir plus sur les attributs EXIF et XMP","semantics_title":"Tags","semantics_tags":"{nb} attributs","semantics_features":"Objets dans la photo","semantics_features_none":"Aucun objet n\'a \xe9t\xe9 dessin\xe9 dans cette photo pour l\'instant.","semantics_features_default_title":"Tag {nb}","semantics_features_subtitle":"{nb} attributs associ\xe9s","semantics_annotation_tooltip":"Cliquez pour voir les d\xe9tails","semantics_show_all_tags":"Voir tous les attributs","semantics_hide_all_tags":"Masquer les attributs","semantics_key":"Cl\xe9","semantics_value":"Valeur","semantics_sequence_tags":"Tag de s\xe9quence","semantics_picture_tags":"Tag de photo","semantics_annotation_tags":"Tag d\'un objet","semantics_doc":"Aide","semantics_doc_title":"\xc0 propos des tags","semantics_doc_info1":"Pr\xe9cisez le contexte d\'une photo en utilisant un tag. Indiquez par exemple qu\'elle a \xe9t\xe9 prise en voiture avec le tag transport=car.","semantics_doc_info2":"Vous pouvez \xe9galement d\xe9tourer des objets au sein d\'une photo\u202f: panneaux routiers, mobilier urbain\u2026 Pr\xe9cisez ce que vous voyez en utilisant les tags existants. Vous pouvez \xe9galement cr\xe9er votre propre tag si besoin.","semantics_doc_info3":"Certains objets sont d\xe9tect\xe9s automatiquement par IA : il n\'y a pas de garantie de qualit\xe9.","semantics_doc_link":"En savoir plus (documentation compl\xe8te en anglais)","semantics_key_doc":"En savoir plus \xe0 propos de cette cl\xe9","semantics_value_doc":"En savoir plus \xe0 propos de cet attribut","semantics_qualifiers":"Qualificateurs","semantics_show_annotations":"Afficher les objets dans la photo","semantics_hide_annotations":"Masquer les objets dans la photo","semantics_zero_annotations":"Aucun objet dessin\xe9 dans cette photo","semantics_add_annotation":"Ajouter un nouveau tag","semantics_draw_annotation":"Vous pouvez dessiner l\'emplacement de l\'objet \xe0 cr\xe9er sur la photo (Optionnel).","semantics_erase_annotation":"Effacer l\'objet dessin\xe9","semantics_delete_annotation":"Supprimer cet objet","semantics_delete_annotation_confirm":"\xcates-vous s\xfbr(e) de vouloir supprimer ce tag ?","semantics_wikidata_properties":{"P31":"instance de","P279":"sous-classe de","P361":"partie de"},"semantics_editor_error":"La syntaxe est invalide. Vos attributs doivent avoir cette forme:\\ncl\xe9=valeur\\npr\xe9fixe|cl\xe9=valeur\\npr\xe9fixe|cl\xe9[qualif_cl\xe9=qualif_val]=valeur\\n\\nLongueur max des cl\xe9s : 256 caract\xe8res, max des valeurs 2048 caract\xe8res.","semantics_editor_example":"cl\xe9=valeur\\npr\xe9fixe|cl\xe9=valeur","semantics_edit":"Modifier les attributs","semantics_save":"Enregistrer vos modifications","semantics_undo":"Annuler vos modifications","semantics_send_fail":"Impossible d\'enregistrer vos modifications, merci de r\xe9essayer plus tard","semantics_login_needed":"Afin de pouvoir modifier les attributs ou objets de la photo, vous devez vous connecter sur l\'instance Panoramax {n}. Voulez-vous vous connecter ?","report":"Signaler","report_auth":"Ce signalement sera envoy\xe9 en utilisant votre compte \\"{a}\\"","report_nature_label":"Nature du probl\xe8me","report_nature":{"":"S\xe9lectionnez la nature du probl\xe8me\u2026","blur_missing":"Un visage ou une plaque d\'immatriculation est visible","blur_excess":"Un objet a \xe9t\xe9 sur-flout\xe9","inappropriate":"L\'image est inappropri\xe9e (non pertinente, nudit\xe9\u2026)","privacy":"Un chemin priv\xe9 ou une propri\xe9t\xe9 priv\xe9e est visible","picture_low_quality":"L\'image est de mauvaise qualit\xe9","mislocated":"L\'image est mal g\xe9olocalis\xe9e","copyright":"L\'image enfreint les droits d\'auteur","other":"Tout autre type de probl\xe8me"},"report_whole_sequence":"Cela concerne toute la s\xe9quence","report_details":"D\xe9tails suppl\xe9mentaires","report_details_placeholder":"Optionnel, vous pouvez ajouter des d\xe9tails sur le probl\xe8me","report_email":"Votre email","report_email_placeholder":"Optionnel","report_submit":"Envoyer","report_wait":"Envoi du signalement en cours\u2026","report_success":"Le signalement a \xe9t\xe9 envoy\xe9 avec succ\xe8s. Il sera examin\xe9 d\xe8s que possible.","report_failure":"Une erreur est survenue lors de la cr\xe9ation du signalement : {e}. Veuillez r\xe9essayer plus tard."},"map":{"loading":"Chargement\u2026","thumbnail":"Miniature de la photo survol\xe9e","not_public":"Masqu\xe9 au public","slow_loading":"La carte est longue \xe0 charger et pourrait appara\xeetre cass\xe9e","map_data":"Carte bas\xe9e sur {m}","more_panoramax":"En savoir plus sur Panoramax"}}')},6909:ae=>{"use strict";ae.exports=JSON.parse('{"psv":{"twoFingers":"K\xe9t ujjal navig\xe1lhat","ctrlZoom":"K\xf6zel\xedt\xe9s vagy t\xe1vol\xedt\xe1s: Ctrl + g\xf6rget\xe9s","loadError":"A panor\xe1ma nem t\xf6lthet\u0151 be"},"pnx":{"zoom":"Nagy\xedt\xe1s","zoomOut":"T\xe1vol\xedt\xe1s","zoomIn":"K\xf6zel\xedt\xe9s","moveUp":"Mozg\xe1s fel","moveDown":"Mozg\xe1s le","moveLeft":"Mozg\xe1s balra","moveRight":"Mozg\xe1s jobbra","moveMiddle":"N\xe9zet k\xf6z\xe9pre hoz\xe1sa","expand":"B\u0151v\xedt\xe9s","expand_info":"Widget megjelen\xedt\xe9se teljes oldalon","show_psv":"K\xe9pn\xe9zeget\u0151 megjelen\xedt\xe9se","show_map":"T\xe9rk\xe9p megjelen\xedt\xe9se","minimize":"Widget elrejt\xe9se; a bal als\xf3 sarokban l\xe9v\u0151 gombbal \xfajra megjelen\xedtheti","options":"Be\xe1ll\xedt\xe1sok","filters":"Sz\u0171r\u0151k","layers":"R\xe9tegek","share":"Megoszt\xe1s","search":"Keres\xe9s","search_empty":"Nincs tal\xe1lat","share_links":"Linkek","share_page":"Link erre az oldalra","share_image":"Nagy felbont\xe1s\xfa (HD) k\xe9p","share_rss":"RSS h\xedrcsatorna","share_rss_title":"A t\xe9rk\xe9p l\xe1that\xf3 ter\xfclet\xe9n l\xe9v\u0151 \xfaj sorozatok RSS-h\xedrcsatorn\xe1ja","share_embed":"Be\xe1gyaz\xe1s a weboldaladon","share_print":"Nyomtat\xe1s","copy":"M\xe1sol\xe1s","copied":"M\xe1solva","error":"Ajjaj, baj van\u2026","error_subtitle":"Pr\xf3b\xe1lja \xfajra k\xe9s\u0151bb, vagy n\xe9zze meg a b\xf6ng\xe9sz\u0151konzolt a tov\xe1bbi r\xe9szletek\xe9rt.","sequence_next":"A sorozat k\xf6vetkez\u0151 k\xe9pe","sequence_play":"Sorozat lej\xe1tsz\xe1sa","sequence_pause":"Sorozatlej\xe1tsz\xe1s sz\xfcneteltet\xe9se","sequence_prev":"A sorozat el\u0151z\u0151 k\xe9pe","sequence_more":"Tov\xe1bbi lej\xe1tsz\xe1si lehet\u0151s\xe9gek","sequence_speed":"Lej\xe1tsz\xe1s sebess\xe9ge","legend_license":"Licenc: {l}","edit_osm":"OSM szerkeszt\xe9se","id":"iD","josm":"JOSM","josm_live":"JOSM automatikus szinkroniz\xe1l\xe1s\xe1nak enged\xe9lyez\xe9se k\xe9pbet\xf6lt\xe9skor","loading_labels_serious":["\ud83d\uddfa\ufe0f T\xe9rk\xe9padatok bet\xf6lt\xe9se","\ud83d\udda5\ufe0f API lek\xe9rdez\xe9se","\ud83d\uddbc\ufe0f B\xe9lyegk\xe9pek bet\xf6lt\xe9se","\ud83d\udd0d EXIF metaadatok elemz\xe9se","\ud83c\udfd8\ufe0f 3D megjelen\xedt\xe9s","\ud83d\udcf7 360\xb0-os k\xe9pek inicializ\xe1l\xe1sa","\ud83d\udfe0 Sz\xednek kiegyenl\xedt\xe9se","\ud83d\udcaf Min\u0151s\xe9gi pontsz\xe1m kisz\xe1m\xedt\xe1sa \xa9"],"loading_labels_fun":["\ud83e\udd8c Vadvesz\xe9lyt jelz\u0151 t\xe1bla \xe9szlel\xe9se","\ud83d\ude98 Panoramax aut\xf3 \xa9 keres\xe9se","\u2615 Koffeininjekci\xf3","\ud83d\ude00 Mosolyogj, fel lett\xe9l t\xe9rk\xe9pezve!","\ud83d\udc08 Kiscic\xe1s k\xe9pek megoszt\xe1sa","\ud83d\ude34 Halogat\xe1s cs\xf6kkent\xe9se","\ud83e\uded6 Tea megf\u0151z\xe9se","\ud83d\udc27 Forr\xe1sk\xf3d felnyit\xe1sa","\ud83d\ude87 Metr\xf3\xe1llom\xe1sok indexel\xe9se","\ud83e\uddf9 Metaadatok tisztogat\xe1sa","\ud83d\ude92 T\u0171zolt\xf3s\xe1gr\xf3l sz\xf3l\xf3 fot\xf3k bek\xfcld\xe9se","\ud83d\udeb2 Z\xf6ldutak friss\xedt\xe9se","\ud83d\ude89 Peronok bej\xe1r\xe1sa","\ud83d\udef0\ufe0f M\u0171holdak keres\xe9se","\ud83d\udc65 Person\xe1k meg\xedr\xe1sa","\ud83d\udc1f S\xfcltkrumplikap\xf3k lokaliz\xe1l\xe1sa","\ud83e\uddd1\u200d\ud83d\udcbb Hibakeres\u0151 fel\xfclet","\ud83d\udcc8 Statisztika n\xf6vel\xe9se"],"error_psv":"A Photo Sphere Viewer (g\xf6mbpanor\xe1ma-n\xe9zeget\u0151) nem t\xf6lt\u0151dik be megfelel\u0151en","error_pic":"A k\xe9rt k\xe9p nem tal\xe1lhat\xf3","error_nopic":"Az adott helyen nem \xe9rhet\u0151 el k\xe9p","error_api":"A k\xe9pkiszolg\xe1l\xf3 nem \xe9rhet\u0151 el","error_webgl":"A WebGL nem t\xe1mogatott ebben a b\xf6ng\xe9sz\u0151ben","error_josm":"A JOSM nem v\xe1laszol. Val\xf3ban fut \xe9s el\xe9rhet\u0151 t\xe1volr\xf3l?","error_api_compatibility":"A k\xe9pkiszolg\xe1l\xf3 nem kompatibilis a k\xe9pn\xe9zeget\u0151 ezen verzi\xf3j\xe1val","filter_date":"D\xe1tum szerint","filter_user":"Felhaszn\xe1l\xf3 szerint","filter_picture":"K\xe9pt\xedpus szerint","picture_flat":"Klasszikus","picture_360":"360\xb0","filter_camera_model":"Kameramodell szerint","map_background":"T\xe9rk\xe9ph\xe1tt\xe9r","map_background_aerial":"L\xe9gi felv\xe9tel","map_background_streets":"k\xe9pUtca","map_theme":"T\xe9rk\xe9p t\xe9m\xe1ja","map_theme_default":"Klasszikus","map_theme_age":"K\xe9pk\xe9sz\xedt\xe9s ideje","map_theme_age_1":"> 2 \xe9ve","map_theme_age_2":"< 2 \xe9ve","map_theme_age_3":"< 1 \xe9ve","map_theme_age_4":"< 1 h\xf3napja","map_theme_type":"Kamerat\xedpus","contrast":"Nagyobb k\xe9pkontraszt enged\xe9lyez\xe9se","metadata":"K\xe9p metaadatai","metadata_general_picid":"K\xe9p azonos\xedt\xf3js","metadata_general_seqid":"Sorozat azonos\xedt\xf3ja","metadata_general_picid_link":"Ugr\xe1s a k\xe9p JSON le\xedr\xe1s\xe1hoz","metadata_general_seqid_link":"Ugr\xe1s a sorozat JSON le\xedr\xe1s\xe1hoz","metadata_general_author":"Szerz\u0151","metadata_general_license":"Licenc (enged\xe9ly)","metadata_general_license_link":"Ugr\xe1s a licenc teljes le\xedr\xe1s\xe1hoz","metadata_general_date":"K\xe9sz\xedt\xe9s d\xe1tuma","metadata_camera":"Kamera","metadata_camera_make":"Gy\xe1rt\xf3","metadata_camera_model":"Modell","metadata_camera_type":"T\xedpus","metadata_camera_focal_length":"Gy\xfajt\xf3t\xe1vols\xe1g","metadata_location":"Helysz\xedn","metadata_location_longitude":"Hossz\xfas\xe1g","metadata_location_latitude":"Sz\xe9less\xe9g","metadata_location_orientation":"Felv\xe9tel ir\xe1nya","metadata_location_precision":"Helymeghat\xe1roz\xe1s pontoss\xe1ga","metadata_exif":"EXIF / XMP","metadata_exif_name":"C\xedmke","metadata_exif_value":"\xc9rt\xe9k","report":"K\xe9p bejelent\xe9se","report_auth":"A jelent\xe9s a fi\xf3kod ({a}) felhaszn\xe1l\xe1s\xe1val lesz elk\xfcldve","report_nature":{"":"Probl\xe9ma jelleg\xe9nek kiv\xe1laszt\xe1sa\u2026","blur_missing":"A k\xe9pen l\xe1tszik egy szem\xe9ly arca vagy egy rendsz\xe1mt\xe1bla","blur_excess":"A k\xe9pen el van hom\xe1lyos\xedtva egy olyan objektum, amelynek \xe9lesnek kellene lennie","inappropriate":"A k\xe9p nem megfelel\u0151 (irrelev\xe1ns, meztelens\xe9get jelen\xedt meg stb.)","privacy":"A k\xe9pen mag\xe1n\xfat vagy mag\xe1nter\xfclet l\xe1that\xf3","picture_low_quality":"A k\xe9p nagyon rossz min\u0151s\xe9g\u0171","mislocated":"A k\xe9p rosszul van elhelyezve a t\xe9rk\xe9pen","copyright":"A k\xe9p szerz\u0151i jogot s\xe9rt","other":"B\xe1rmilyen m\xe1s jelleg\u0171 probl\xe9ma"},"report_nature_label":"Probl\xe9ma jellege","report_details":"Tov\xe1bbi r\xe9szletek","filter_zoom_in":"Nagy\xedts a sz\u0171r\u0151k l\xe1that\xf3v\xe1 t\xe9tel\xe9hez","report_email":"E-mail-c\xedm","report_email_placeholder":"Nem k\xf6telez\u0151","report_submit":"Bek\xfcld\xe9s","report_success":"A jelent\xe9s sikeresen be lett k\xfcldve; a lehet\u0151 leghamarabb megvizsg\xe1ljuk.","report_failure":"Hiba t\xf6rt\xe9nt a jelent\xe9s l\xe9trehoz\xe1sakor: {e}. K\xe9rj\xfck, pr\xf3b\xe1ld meg k\xe9s\u0151bb \xfajra.","search_user":"Felhaszn\xe1l\xf3n\xe9v keres\xe9se\u2026","search_address":"C\xedm, v\xe1ros stb. keres\xe9se\u2026","share_embed_docs":"Tov\xe1bbi inform\xe1ci\xf3 a be\xe1gyaz\xe1s konfigur\xe1l\xe1s\xe1r\xf3l","error_click":"Kattints a folytat\xe1shoz","error_retry":"K\xe9rj\xfck, pr\xf3b\xe1ld meg k\xe9s\u0151bb","legend_title":"K\xe9p adatainak megjelen\xedt\xe9se","report_whole_sequence":"A teljes sorozatra vonatkozik","report_wait":"Jelent\xe9s bek\xfcld\xe9se folyamatban\u2026","report_details_placeholder":"Megadhatsz tov\xe1bbi r\xe9szleteket a probl\xe9m\xe1r\xf3l (nem k\xf6telez\u0151)","filter_qualityscore_help":"Kattints az enged\xe9lyez\xe9shez vagy a letilt\xe1shoz","filter_qualityscore":"Min\u0151s\xe9gi pontsz\xe1m","map_theme_score":"Min\u0151s\xe9gi pontsz\xe1m","metadata_camera_resolution":"Felbont\xe1s","metadata_quality":"Min\u0151s\xe9gi pontsz\xe1m","metadata_quality_help":"Tov\xe1bbi tudnival\xf3k a min\u0151s\xe9gi pontsz\xe1mr\xf3l","metadata_quality_score":"\xd6sszes\xedtett pontsz\xe1m","metadata_quality_gps_score":"Pozicion\xe1l\xe1si pontsz\xe1m","metadata_quality_resolution_score":"Felbont\xe1si pontsz\xe1m","metadata_quality_missing":"a k\xe9pben nincs megadva \xe9rt\xe9k"},"map":{"loading":"Bet\xf6lt\xe9s\u2026","thumbnail":"A kurzor alatti k\xe9p b\xe9lyegk\xe9pe","not_public":"Nem l\xe1that\xf3 nyilv\xe1nosan","slow_loading":"A t\xe9rk\xe9p lassan t\xf6lt\u0151dik be, \xe9s lehet, hogy lerobbant"},"maplibre":{"GeolocateControl.FindMyLocation":"Tart\xf3zkod\xe1si hely megtal\xe1l\xe1sa","GeolocateControl.LocationNotAvailable":"Tart\xf3zkod\xe1si hely nem \xe9rhet\u0151 el"}}')},4895:ae=>{"use strict";ae.exports=JSON.parse('{"pnx":{"expand":"Espandi","zoomOut":"Rimpicciolisci","zoomIn":"Ingrandisci","zoom":"Zoom","moveUp":"Muovi in alto","moveDown":"Muovi in basso","moveLeft":"Muovi a sinistra","moveRight":"Muovi a destra","expand_info":"Fai apparire il widget a schermo pieno","options":"Opzioni","filters":"Filtri","layers":"Livelli","search":"Cerca","search_empty":"Nessun risultato trovato","search_address":"Cerca un indirizzo, citt\xe0\u2026","search_user":"Cerca un nome utente\u2026","share":"Condividi","share_links":"Collegamenti","share_page":"Collegamento a questa immagine","share_image":"Immagine HD","share_embed":"Incorpora nel tuo sito web","share_embed_docs":"Scopri di pi\xf9 sulla configurazione della incorporazione","share_print":"Stampa","copy":"Copia","copied":"Copiato","error":"Abbiamo un problema\u2026","error_click":"Continuare","error_retry":"Riprovare pi\xf9 tardi","sequence_play":"Riproduci questa sequenza","sequence_pause":"Pausa la sequenza","sequence_speed":"Velocit\xe0 di riproduzione","legend_license":"Licenza: {l}","legend_title":"Mostra dettagli della foto","edit_osm":"Modifica OSM","loading_labels_serious":["\ud83d\uddfa\ufe0f Caricamento dei dati della mappa","\ud83d\udda5\ufe0f Interrogazione delle API","\ud83d\uddbc\ufe0f Caricamento delle miniature","\ud83d\udd0d Analisi dei metadata EXIF","\ud83c\udfd8\ufe0f Creazione del rendering 3D","\ud83d\udcf7 Inizializzazione delle foto a 360\xb0","\ud83d\udfe0 Bilanciamento del colore","\ud83d\udcaf Calcolo del punteggio della qualit\xe0 \xa9","\ud83d\udce1 Scaricamento degli aggiornamenti","\ud83c\udf0d Recupero dei tasselli della mappa","\ud83d\udcf8 Elaborazione delle ombre"],"loading_labels_fun":["\ud83e\udd8c Rilevazione dei cartelli di attraversamento dei cervi","\ud83d\ude98 Ricerca dell\u2019auto Panoramax \xa9","\u2615 Iniezione di caffeina","\ud83d\ude00 Sorridete, siete stati mappati!","\ud83d\udc08 Condivisione delle foto di gatti","\ud83d\ude34 Riduzione della procrastinazione","\ud83e\uded6 Preparazione del t\xe8","\ud83d\udc27 Apertura del codice sorgente","\ud83d\ude87 Indicizzazione delle stazioni della metro","\ud83e\uddf9 Pulizia dei metadata","\ud83d\ude92 Invio delle foto delle stazioni dei pompieri","\ud83d\udeb2 Aggiornamento delle strade verdi","\ud83d\ude89 Passeggiata sulle banchine della stazione","\ud83d\udef0\ufe0f Ricerca dei satelliti","\ud83d\udc65 Scrittura delle persone","\ud83d\udc1f Ricerca dei negozi di patatine fritte","\ud83e\uddd1\u200d\ud83d\udcbb Debug dell\u2019interfaccia","\ud83d\udcc8 Incremento delle statistiche","\ud83e\udd16 Apprendimento della semantica","\ud83c\udfa8 Riprogettazione dell\u2019interfaccia","\ud83d\udcc5 Pianificazione di eventi di photo-mapping","\ud83e\uddc0 Affinamento dei formaggi","\ud83c\udf04 Calcolo della nebbia in Valpadana","\ud83c\udf0a Misurazione delle grandi maree"],"error_psv":"Il visualizzatore delle foto sferiche non si sta caricando correttamente","error_pic":"La foto richiesta non \xe8 stata trovata","error_nopic":"Nessuna foto disponibile alla posizione richiesta","error_api":"Il server delle foto non \xe8 disponibile","error_webgl":"Il tuo browser non supporta WebGL","error_josm":"JOSM non risponde, \xe8 in esecuzione con il controllo remoto abilitato?","error_api_compatibility":"Il server delle foto non \xe8 compatibile con questa versione del visualizzatore","filter_date":"Data","filter_date_1month":"1 mese","filter_date_1year":"1 anno","filter_user_mypics":"Le mie foto","filter_picture":"Tipo di foto","filter_zoom_in":"Ingrandisci la mappa per vedere questo filtro","picture_flat":"Classica","picture_360":"360\xb0","filter_qualityscore_help":"Clicca per abilitare o disabilitare","map_background":"Sfondo della mappa","map_background_aerial":"Satellite","map_background_streets":"Strade","map_theme":"Tema della mappa","map_theme_default":"Classica","map_theme_age":"Data di acquisizione","map_theme_age_2":"< 2 anni","map_theme_age_3":"< 1 anno","map_theme_age_4":"< 1 mese","map_theme_score":"Punteggio della qualit\xe0","contrast":"Abilita un maggiore contrasto della foto","metadata":"Metadata della foto","metadata_general_picid":"Foto","metadata_general_picid_link":"Vai alla descrizione JSON della foto","metadata_general_seqid_link":"Vai alla descrizione JSON della sequenza","metadata_general_author":"Autore","metadata_general_license":"Licenza","metadata_general_date":"Data di acquisizione","metadata_camera":"Fotocamera","metadata_camera_make":"Costruttore","metadata_camera_model":"Modello","metadata_camera_type":"Tipo","metadata_camera_resolution":"Risoluzione","metadata_location":"Posizione","metadata_location_longitude":"Longitudine","metadata_location_latitude":"Latitudine","metadata_location_precision":"Precisione della posizione","metadata_quality":"Qualit\xe0","metadata_quality_score":"Punteggio globale","metadata_quality_gps_score":"Punteggio della posizione","metadata_quality_resolution_score":"Punteggio della risoluzione","metadata_exif":"EXIF","metadata_exif_name":"Attributo","report_auth":"Questa segnalazione verr\xe0 inviata usando la tua utenza \u201c{a}\u201d","report_nature_label":"Causa del problema","report_nature":{"blur_excess":"\xc8 stata applicata ad un oggetto una sfocatura non necessaria","inappropriate":"La foto \xe8 inappropriata (non pertinente, nudo, \u2026)","mislocated":"La posizione della foto sulla mappa \xe8 sbagliata","copyright":"La foto viola il diritto d\u2019autore","other":"Qualsiasi altro tipo di problema","picture_low_quality":"La foto \xe8 di bassa qualit\xe0","":"Selezione la natura del problema\u2026","blur_missing":"Sono visibili la faccia di una persona o la targa di un\u2019auto","privacy":"Sono visibili un sentiero o una propriet\xe0 privati"},"report_whole_sequence":"Riguarda l\u2019intera sequenza","report_details":"Ulteriori dettagli","report_email":"La tua e-mail","report_email_placeholder":"Facoltativo","report_submit":"Invia","report_wait":"Invio della segnalazione\u2026","report_failure":"\xc8 avvenuto un errore durante la creazione della segnalazione: {e}. Riprovare pi\xf9 tardi.","moveMiddle":"Centra la visuale","show_map":"Mostra la mappa","sequence_next":"Prossima foto nella sequenza","map_theme_age_1":"> 2 anni","map_theme_type":"Tipo di fotocamera","minimize":"Nascondi il widget, puoi mostrarlo di nuovo usando il pulsante nell\u2019angolo in basso a sinistra","metadata_general_license_link":"Vedi la descrizione completa della licenza","share_rss":"Feed RSS","show_psv":"Mostra il visualizzatore delle foto","share_rss_title":"Feed RSS delle nuove sequenze nell\u2019attuale area visibile della mappa","sequence_prev":"Foto precedente della sequenza","sequence_more":"Altre opzioni di riproduzione","josm_live":"Abilita la sincronizzazione automatica di JOSM al caricamento delle foto","metadata_general_seqid":"Sequenza","metadata_camera_focal_length":"Lunghezza focale","filter_user":"Utente","metadata_location_orientation":"Direzione","filter_qualityscore":"Punteggio della qualit\xe0","metadata_quality_help":"Per saperne di pi\xf9 sul punteggio della qualit\xe0","metadata_quality_missing":"Nessun valore impostato nella foto","metadata_exif_value":"Valore","report":"Segnala","report_details_placeholder":"Facoltativo, puoi aggiungere dei dettagli sul problema","report_success":"La segnalazione \xe8 stata inviata correttamente. Non appena possibile verr\xe0 esaminata.","minimize_short":"Nascondi","qualityscore_title":"Informazioni sul punteggio della qualit\xe0","qualityscore_doc_1":"Panoramax propone un Punteggio della qualit\xe0 per ogni foto. Ci\xf2 permette di filtrare facilmente la mappa e mostrare le foto di alta qualit\xe0 disponibili.","qualityscore_doc_2":"Il voto \xe8 mostrato agli utenti con un valore tipo A/B/C/D/E (A \xe8 il voto migliore, E il peggiore) e graficamente viene mostrato con la seguente scala:","qualityscore_doc_link":"Nella nostra documentazione sono presenti maggiori dettagli sul calcolo del Punteggio della qualit\xe0","qualityscore_doc_3":"Esso \xe8 calcolato basandosi sulla precisione del GPS e sulla risoluzione della foto. Un sistema professionale avr\xe0 un punteggio A, un action camera a 360\xb0 avr\xe0 un punteggio B e uno smartphone verr\xe0 classificato come C, D o E.","metadata_general_instance":"Istanza di origine","josm":"JOSM","picture_flat_long":"Foto classica","picture_360_long":"Foto panoramica","metadata_summary":"Sintesi","metadata_general_copy_id":"Copia l\u2019ID","metadata_general_copy_picid":"Copia l\u2019ID della foto","id":"iD","contribute_id":"Contribuisci a OpenStreetMap con l\u2019editor iD","geo_uri":"App esterna","filter_date_6months":"6 mesi","picture_all":"Tutte","metadata_exif_doc":"Doc per gli attributi EXIF","metadata_exif_doc_title":"Vai alla documentazione di Exiv2 per i dettagli completi sulle definizioni degli attributi EXIF e XMP","semantics_value":"Valore","semantics_key_doc":"Per saperne di pi\xf9 su questa chiave","semantics_title":"Etichette","semantics_features":"Oggetti rilevati","semantics_features_none":"Non \xe8 ancora stato rilevato alcun oggetto in questa foto.","semantics_features_default_title":"Oggetto #{nb}","semantics_features_subtitle":"{nb} propriet\xe0 associate","semantics_tags":"{nb} attributi","semantics_show_all_tags":"Mostra tutti gli attributi","semantics_hide_all_tags":"Nascondi tutti gli attributi","semantics_key":"Chiave","semantics_value_doc":"Per saperne di pi\xf9 su questa etichetta","semantics_wikidata_properties":{"P361":"parte di","P31":"instanza di","P279":"sottoclasse di"},"semantics_hide_annotations":"Nascondi le annotazioni della foto","semantics_tags_picture":"Etichette della foto","semantics_show_annotations":"Mostra le annotazioni della foto","semantics_annotation_tooltip":"Clicca per vedere i dettagli","semantics_tags_picture_none":"Non \xe8 stata ancora aggiunta alcuna etichetta su questa foto.","semantics_qualifiers":"Qualificatori","metadata_location_coordinates":"Coordinate (longitudine, latitudine)","metadata_location_copy":"Copia {v}","metadata_location_copy_more":"Ulteriori opzioni per la copia delle coordinate","whats_panoramax":"Panoramax \xe8 la geo-commons per le foto dei territori.","panoramax":"Panoramax","semantics_zero_annotations":"Nessuna annotazione impostata per questa immagine","semantics_hashtags":"Hashtag dell\u2019immagine","semantics_editor_error":"La sintassi non \xe8 valida. Le tue etichette devono avere la seguente forma:\\nchiave=valore\\nprefisso|chiave=valore\\nprefisso|chiave[qualif_chiave=qualif_valore]=valore\\n\\nLa lunghezza massima di una chiave \xe8 di 256 caratteri, quella di un valore \xe8 di 2048 caratteri.","semantics_editor_example":"chiave=valore\\nprefisso|chiave=valore","semantics_edit":"Modifica gli attributi","semantics_save":"Salva le tue modifiche","semantics_undo":"Annulla le tue modifiche","semantics_send_fail":"Non \xe8 stato possibile salvare le tue modifiche, riprova pi\xf9 tardi","semantics_cantsave_invalid":"Impossibile salvare le modifiche, input non valido","semantics_send_ok":"Le tue modifiche sono state inviate con successo","semantics_add_annotation":"Aggiungi una nuova annotazione","semantics_draw_annotation":"Per prima cosa fai clic su un angolo dell\u2019elemento che vorresti rappresentare. Poi fai clic sull\u2019angolo opposto. Per spostarle un angolo fai clic di nuovo su di esso.","semantics_save_drawn_annotation":"Salva posizione","semantics_undo_drawn_annotation":"Annulla","semantics_save_drawn_annotation_incomplete":"Devi disegnare un rettangolo all\u2019interno dell\u2019immagine prima di validarlo","semantics_delete_annotation":"Elimina questa annotazione","semantics_delete_annotation_confirm":"Vuoi veramente eliminare questa annotazione?"},"psv":{"loadError":"Impossibile caricare l\u2019immagine panoramica","ctrlZoom":"Utilizza Ctrl + rotellina del mouse per ingrandire l\u2019immagine","twoFingers":"Usa due dita per spostarti"},"maplibre":{"GeolocateControl.FindMyLocation":"Trova la mia posizione","GeolocateControl.LocationNotAvailable":"Posizione non disponibile"},"map":{"loading":"Caricamento\u2026","thumbnail":"Miniatura della foto passata con il mouse","not_public":"Non pubblicamente visibile","slow_loading":"La mappa impiega troppo tempo a caricarsi e potrebbe apparire a pezzi","map_data":"Dati cartografici: {m}","more_panoramax":"Per saperne di pi\xf9 su Panoramax"}}')},3979:ae=>{"use strict";ae.exports=JSON.parse('{"pnx":{"metadata_general_picid":"\u753b\u50cf\u8b58\u5225\u5b50","loading_labels_fun":["\ud83e\udd8c \u9e7f\u306e\u6a2a\u65ad\u6a19\u8b58\u306e\u691c\u51fa","\ud83d\ude98 Panoramax Car \xa9\u3092\u691c\u7d22","\u2615 \u30ab\u30d5\u30a7\u30a4\u30f3\u306e\u6ce8\u5165","\ud83d\ude00 \u7b11\u3063\u3066\u304f\u3060\u3055\u3044\u3001\u3042\u306a\u305f\u306f\u5730\u56f3\u306b\u8f09\u3063\u3066\u3044\u307e\u3059\uff01","\ud83d\udc08 \u732b\u306e\u5199\u771f\u3092\u5171\u6709\u3059\u308b","\ud83d\ude34 \u5148\u5ef6\u3070\u3057\u3092\u6e1b\u3089\u3059","\ud83e\uded6 \u304a\u8336\u3092\u6df9\u308c\u308b","\ud83d\udc27 \u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3092\u516c\u958b","\ud83d\ude87 \u5730\u4e0b\u9244\u99c5\u306e\u7d22\u5f15","\ud83e\uddf9 \u30e1\u30bf\u30c7\u30fc\u30bf\u306e\u30af\u30ea\u30fc\u30f3\u30a2\u30c3\u30d7","\ud83d\ude92 \u6d88\u9632\u7f72\u306e\u5199\u771f\u3092\u9001\u4fe1","\ud83d\udeb2 \u30b0\u30ea\u30fc\u30f3\u30a6\u30a7\u30a4\u30ba\u306e\u66f4\u65b0","\ud83d\ude89 \u99c5\u306e\u30db\u30fc\u30e0\u306e\u30a6\u30a9\u30fc\u30af\u30b9\u30eb\u30fc","\ud83d\udef0\ufe0f \u885b\u661f\u306e\u63a2\u7d22","\ud83d\udc65 \u30da\u30eb\u30bd\u30ca\u3092\u66f8\u304f","\ud83d\udc1f \u30c1\u30c3\u30d7\u30b7\u30e7\u30c3\u30d7\u306e\u5834\u6240","\ud83e\uddd1\u200d\ud83d\udcbb \u30c7\u30d0\u30c3\u30b0\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9","\ud83d\udcc8 \u7d71\u8a08\u306e\u5897\u52a0"],"share_embed_docs":"\u57cb\u3081\u8fbc\u307f\u8a2d\u5b9a\u306e\u8a73\u7d30\u3092\u8aad\u3080","filter_zoom_in":"\u3053\u306e\u30d5\u30a3\u30eb\u30bf\u30fc\u3092\u8868\u793a\u3059\u308b\u306b\u306f\u62e1\u5927\u3057\u3066\u304f\u3060\u3055\u3044","metadata_camera_type":"\u30bf\u30a4\u30d7","minimize":"\u3053\u306e\u30a6\u30a3\u30b8\u30a7\u30c3\u30c8\u3092\u975e\u8868\u793a\u306b\u3059\u308b\u306b\u306f\u3001\u5de6\u4e0b\u306e\u30dc\u30bf\u30f3\u3092\u4f7f\u7528\u3057\u3066\u518d\u5ea6\u8868\u793a\u3057\u307e\u3059","error_psv":"Photo Sphere Viewer \u304c\u6b63\u3057\u304f\u8aad\u307f\u8fbc\u307e\u308c\u307e\u305b\u3093\u3067\u3057\u305f","error_josm":"JOSM \u304c\u5fdc\u7b54\u3057\u307e\u305b\u3093\u3002\u5b9f\u884c\u3055\u308c\u3066\u3044\u3066\u3001\u30ea\u30e2\u30fc\u30c8\u304c\u6709\u52b9\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u304b?","filter_user":"\u30e6\u30fc\u30b6\u30fc","qualityscore_doc_3":"\u3053\u308c\u306f GPS \u306e\u7cbe\u5ea6\u3068\u753b\u50cf\u306e\u89e3\u50cf\u5ea6\u306b\u57fa\u3065\u3044\u3066\u8a08\u7b97\u3055\u308c\u307e\u3059\u3002\u30d7\u30ed\u4ed5\u69d8\u306e\u30b7\u30b9\u30c6\u30e0\u306f A \u8a55\u4fa1\u3001360\xb0 \u30a2\u30af\u30b7\u30e7\u30f3 \u30ab\u30e1\u30e9\u306f B \u8a55\u4fa1\u3001\u30b9\u30de\u30fc\u30c8\u30d5\u30a9\u30f3\u306f C/D/E \u8a55\u4fa1\u306b\u306a\u308a\u307e\u3059\u3002","report_nature":{"inappropriate":"\u5199\u771f\u304c\u4e0d\u9069\u5207\u3067\u3059\uff08\u7121\u95a2\u4fc2\u3001\u30cc\u30fc\u30c9\u306a\u3069\uff09","":"\u554f\u984c\u306e\u6027\u8cea\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u2026","blur_missing":"\u4eba\u306e\u9854\u3084\u8eca\u306e\u30ca\u30f3\u30d0\u30fc\u30d7\u30ec\u30fc\u30c8\u304c\u898b\u3048\u308b","blur_excess":"\u307c\u304b\u3059\u5fc5\u8981\u306e\u306a\u3044\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u304c\u307c\u3084\u3051\u3066\u3044\u308b","privacy":"\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30d1\u30b9\u307e\u305f\u306f\u30d7\u30ed\u30d1\u30c6\u30a3\u304c\u8868\u793a\u3055\u308c\u307e\u3059","picture_low_quality":"\u753b\u50cf\u306e\u54c1\u8cea\u304c\u60aa\u3044","mislocated":"\u5730\u56f3\u4e0a\u306e\u5199\u771f\u306e\u4f4d\u7f6e\u304c\u9069\u5207\u3067\u306f\u3042\u308a\u307e\u305b\u3093","copyright":"\u753b\u50cf\u306f\u8457\u4f5c\u6a29\u3092\u4fb5\u5bb3\u3057\u3066\u3044\u307e\u3059","other":"\u305d\u306e\u4ed6\u306e\u554f\u984c"},"sequence_next":"\u6b21\u306e\u753b\u50cf","sequence_play":"\u3053\u306e\u30b7\u30fc\u30b1\u30f3\u30b9\u306b\u6cbf\u3063\u3066\u30d7\u30ec\u30a4\u3057\u3066\u304f\u3060\u3055\u3044","sequence_pause":"\u4e00\u6642\u505c\u6b62\u30b7\u30fc\u30b1\u30f3\u30b9","sequence_prev":"\u524d\u306e\u753b\u50cf","sequence_more":"\u3088\u308a\u591a\u304f\u306e\u30d7\u30ec\u30a4\u30aa\u30d7\u30b7\u30e7\u30f3","sequence_speed":"\u30d7\u30ec\u30a4\u30e4\u30fc\u306e\u30b9\u30d4\u30fc\u30c9","legend_license":"\u30e9\u30a4\u30bb\u30f3\u30b9: {l}","legend_title":"\u5199\u771f\u306e\u8a73\u7d30\u3092\u8868\u793a","edit_osm":"OSM\u306b\u8ca2\u732e\u3059\u308b","josm_live":"\u753b\u50cf\u8aad\u307f\u8fbc\u307f\u6642\u306bJOSM\u81ea\u52d5\u540c\u671f\u3092\u6709\u52b9\u306b\u3059\u308b","loading_labels_serious":["\ud83d\uddfa\ufe0f \u30de\u30c3\u30d7\u30c7\u30fc\u30bf\u306e\u8aad\u307f\u8fbc\u307f","\ud83d\udda5\ufe0f \u30af\u30a8\u30eaAPI","\ud83d\uddbc\ufe0f \u30b5\u30e0\u30cd\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3093\u3067\u3044\u307e\u3059","\ud83d\udd0d EXIF\u30e1\u30bf\u30c7\u30fc\u30bf\u306e\u5206\u6790","\ud83c\udfd8\ufe0f 3D\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0","\ud83d\udcf7 360\xb0\u5199\u771f\u3092\u521d\u671f\u5316\u3057\u3066\u3044\u307e\u3059","\ud83d\udfe0 \u8272\u306e\u30d0\u30e9\u30f3\u30b9","\ud83d\udcaf \u30b3\u30f3\u30d4\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u54c1\u8cea\u30b9\u30b3\u30a2 \xa9"],"error_pic":"\u8981\u6c42\u3055\u308c\u305f\u5199\u771f\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f","error_nopic":"\u6307\u5b9a\u3055\u308c\u305f\u4f4d\u7f6e\u306b\u306f\u753b\u50cf\u304c\u3042\u308a\u307e\u305b\u3093","error_api":"\u5199\u771f\u30b5\u30fc\u30d0\u30fc\u304c\u5229\u7528\u3067\u304d\u307e\u305b\u3093","error_webgl":"WebGL\u306f\u30d6\u30e9\u30a6\u30b6\u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093","error_api_compatibility":"\u753b\u50cf\u30b5\u30fc\u30d0\u30fc\u306f\u3053\u306e\u30d3\u30e5\u30fc\u30a2\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3068\u4e92\u63db\u6027\u304c\u3042\u308a\u307e\u305b\u3093","filter_date":"\u65e5\u4ed8","filter_date_1month":"1\u30f6\u6708","filter_date_1year":"1\u5e74","filter_user_mypics":"\u79c1\u306e\u5199\u771f","filter_picture":"\u753b\u50cf\u30bf\u30a4\u30d7","picture_flat":"\u30af\u30e9\u30b7\u30c3\u30af","picture_360":"360\xb0","filter_qualityscore":"\u54c1\u8cea\u30b9\u30b3\u30a2","filter_qualityscore_help":"\u30af\u30ea\u30c3\u30af\u3057\u3066\u6709\u52b9\u307e\u305f\u306f\u7121\u52b9\u306b\u3057\u307e\u3059","qualityscore_title":"\u54c1\u8cea\u30b9\u30b3\u30a2\u306b\u3064\u3044\u3066","qualityscore_doc_1":"Panoramax \u306f\u3001\u5404\u5199\u771f\u306b\u54c1\u8cea\u30b9\u30b3\u30a2\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u5730\u56f3\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u304c\u7c21\u5358\u306b\u306a\u308a\u3001\u9ad8\u54c1\u8cea\u306e\u5199\u771f\u306e\u53ef\u7528\u6027\u3092\u5305\u62ec\u7684\u306b\u8868\u793a\u3067\u304d\u307e\u3059\u3002","qualityscore_doc_2":"\u8a55\u4fa1\u306f A/B/C/D/E \u30b9\u30b3\u30a2 (A \u304c\u6700\u9ad8\u3001E \u304c\u6700\u4f4e) \u3068\u3057\u3066\u30e6\u30fc\u30b6\u30fc\u306b\u8868\u793a\u3055\u308c\u3001\u6b21\u306e\u30b9\u30b1\u30fc\u30eb\u3067\u30b0\u30e9\u30d5\u8868\u793a\u3055\u308c\u307e\u3059\u3002","qualityscore_doc_link":"\u54c1\u8cea\u30b9\u30b3\u30a2\u306e\u8a08\u7b97\u306e\u8a73\u7d30\u306b\u3064\u3044\u3066\u306f\u3001\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002","map_background":"\u5730\u56f3\u306e\u80cc\u666f","map_background_aerial":"\u822a\u7a7a\u5199\u771f","map_background_streets":"\u901a\u308a","map_theme":"\u30de\u30c3\u30d7\u30c6\u30fc\u30de","map_theme_default":"\u30af\u30e9\u30b7\u30c3\u30af","map_theme_age":"\u64ae\u5f71\u65e5","map_theme_age_1":"2\u6b73\u4ee5\u4e0a","map_theme_age_2":"2\u6b73\u672a\u6e80","map_theme_age_3":"1\u6b73\u672a\u6e80","map_theme_age_4":"1\u304b\u6708\u672a\u6e80","map_theme_type":"\u30ab\u30e1\u30e9\u30bf\u30a4\u30d7","map_theme_score":"\u54c1\u8cea\u30b9\u30b3\u30a2","contrast":"\u3088\u308a\u9ad8\u3044\u753b\u50cf\u30b3\u30f3\u30c8\u30e9\u30b9\u30c8\u3092\u6709\u52b9\u306b\u3059\u308b","metadata":"\u753b\u50cf\u30e1\u30bf\u30c7\u30fc\u30bf","metadata_general_seqid":"\u30b7\u30fc\u30b1\u30f3\u30b9\u8b58\u5225\u5b50","metadata_general_picid_link":"\u753b\u50cf\u306eJSON\u8aac\u660e\u3078\u79fb\u52d5","metadata_general_seqid_link":"\u30b7\u30fc\u30b1\u30f3\u30b9\u306eJSON\u8a18\u8ff0\u3078\u79fb\u52d5","metadata_general_author":"\u8457\u8005","metadata_general_license":"\u30e9\u30a4\u30bb\u30f3\u30b9","metadata_general_license_link":"\u30e9\u30a4\u30bb\u30f3\u30b9\u306e\u5b8c\u5168\u306a\u8aac\u660e\u3092\u898b\u308b","metadata_general_date":"\u64ae\u5f71\u65e5","metadata_camera":"\u30ab\u30e1\u30e9","metadata_camera_make":"\u30e1\u30fc\u30ab\u30fc","metadata_camera_model":"\u30e2\u30c7\u30eb","metadata_camera_resolution":"\u89e3\u50cf\u5ea6","metadata_camera_focal_length":"\u7126\u70b9\u8ddd\u96e2","metadata_location":"\u4f4d\u7f6e","metadata_location_longitude":"\u7d4c\u5ea6","metadata_location_latitude":"\u7def\u5ea6","metadata_location_orientation":"\u64ae\u5f71\u65b9\u5411","metadata_location_precision":"\u4f4d\u7f6e\u6c7a\u3081\u7cbe\u5ea6","metadata_quality":"\u54c1\u8cea\u30b9\u30b3\u30a2","metadata_quality_help":"\u54c1\u8cea\u30b9\u30b3\u30a2\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u77e5\u308b","metadata_quality_score":"\u30b0\u30ed\u30fc\u30d0\u30eb\u30b9\u30b3\u30a2","metadata_quality_gps_score":"\u30dd\u30b8\u30b7\u30e7\u30cb\u30f3\u30b0\u30b9\u30b3\u30a2","metadata_quality_resolution_score":"\u89e3\u6c7a\u30b9\u30b3\u30a2","metadata_quality_missing":"\u753b\u50cf\u306b\u5024\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093","metadata_exif":"EXIF / XMP","metadata_exif_name":"\u30bf\u30b0","metadata_exif_value":"\u4fa1\u5024","report":"\u5199\u771f\u3092\u5831\u544a\u3059\u308b","report_auth":"\u3053\u306e\u30ec\u30dd\u30fc\u30c8\u306f\u3042\u306a\u305f\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u300c{a}\u300d\u3092\u4f7f\u7528\u3057\u3066\u9001\u4fe1\u3055\u308c\u307e\u3059","report_nature_label":"\u554f\u984c\u306e\u6027\u8cea","report_whole_sequence":"\u3053\u308c\u306f\u30b7\u30fc\u30b1\u30f3\u30b9\u5168\u4f53\u306b\u95a2\u4fc2\u3059\u308b","report_details":"\u8ffd\u52a0\u306e\u8a73\u7d30","report_details_placeholder":"\u30aa\u30d7\u30b7\u30e7\u30f3\u3068\u3057\u3066\u3001\u554f\u984c\u306e\u8a73\u7d30\u3068\u305d\u308c\u304c\u3069\u306e\u3088\u3046\u306b\u95a2\u4fc2\u3057\u3066\u3044\u308b\u304b\u3092\u8ffd\u52a0\u3067\u304d\u307e\u3059","report_email":"\u3042\u306a\u305f\u306e\u30e1\u30fc\u30eb","report_email_placeholder":"\u30aa\u30d7\u30b7\u30e7\u30f3","report_submit":"\u9001\u4fe1","report_wait":"\u30ec\u30dd\u30fc\u30c8\u3092\u9001\u4fe1\u3057\u3066\u3044\u307e\u3059\u2026","report_success":"\u30ec\u30dd\u30fc\u30c8\u306f\u6b63\u5e38\u306b\u9001\u4fe1\u3055\u308c\u307e\u3057\u305f\u3002\u3067\u304d\u308b\u3060\u3051\u65e9\u304f\u78ba\u8a8d\u3055\u308c\u307e\u3059\u3002","report_failure":"\u30ec\u30dd\u30fc\u30c8\u306e\u4f5c\u6210\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {e}\u3002\u3057\u3070\u3089\u304f\u3057\u3066\u304b\u3089\u3082\u3046\u4e00\u5ea6\u304a\u8a66\u3057\u304f\u3060\u3055\u3044\u3002","zoom":"\u30ba\u30fc\u30e0","zoomOut":"\u30ba\u30fc\u30e0\u30a2\u30a6\u30c8","zoomIn":"\u30ba\u30fc\u30e0\u30a4\u30f3","moveUp":"\u4e0a\u306b\u79fb\u52d5","moveDown":"\u4e0b\u306b\u79fb\u52d5","moveLeft":"\u5de6\u306b\u79fb\u52d5","moveRight":"\u53f3\u306b\u79fb\u52d5","moveMiddle":"\u30d3\u30e5\u30fc\u3092\u4e2d\u592e\u306b\u914d\u7f6e\u3059\u308b","expand":"\u62e1\u5927\u3059\u308b","expand_info":"\u30a6\u30a3\u30b8\u30a7\u30c3\u30c8\u3092\u5168\u30da\u30fc\u30b8\u306b\u8868\u793a\u3059\u308b","show_psv":"\u753b\u50cf\u30d3\u30e5\u30fc\u30a2\u3092\u8868\u793a\u3059\u308b","show_map":"\u5730\u56f3\u3092\u8868\u793a","minimize_short":"\u96a0\u308c\u308b","options":"\u30aa\u30d7\u30b7\u30e7\u30f3","filters":"\u30d5\u30a3\u30eb\u30bf\u30fc","layers":"\u30ec\u30a4\u30e4\u30fc","search":"\u691c\u7d22","search_empty":"\u7d50\u679c\u306a\u3057","search_address":"\u4f4f\u6240\u3001\u5e02\u533a\u753a\u6751\u306a\u3069\u3092\u691c\u7d22","search_user":"\u30e6\u30fc\u30b6\u30fc\u540d\u3092\u691c\u7d22\u2026","share":"\u5171\u6709","share_links":"\u30ea\u30f3\u30af","share_page":"\u3053\u306e\u30da\u30fc\u30b8\u3078\u306e\u30ea\u30f3\u30af","share_image":"HD\u753b\u50cf","share_rss":"RSS\u30d5\u30a3\u30fc\u30c9","share_rss_title":"\u73fe\u5728\u8868\u793a\u3055\u308c\u3066\u3044\u308b\u30de\u30c3\u30d7\u30a8\u30ea\u30a2\u5185\u306e\u65b0\u3057\u3044\u30b7\u30fc\u30b1\u30f3\u30b9\u306e RSS \u30d5\u30a3\u30fc\u30c9","share_embed":"\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u306b\u57cb\u3081\u8fbc\u3080","share_print":"\u5370\u5237","copy":"\u30b3\u30d4\u30fc","copied":"\u30b3\u30d4\u30fc\u3057\u307e\u3057\u305f","error":"\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u2026","error_click":"\u7d9a\u304f","error_retry":"\u5f8c\u3067\u3082\u3046\u4e00\u5ea6\u304a\u8a66\u3057\u304f\u3060\u3055\u3044"},"map":{"loading":"\u8aad\u307f\u8fbc\u307f\u4e2d\u2026","thumbnail":"\u30db\u30d0\u30fc\u3057\u305f\u753b\u50cf\u306e\u30b5\u30e0\u30cd\u30a4\u30eb","not_public":"\u516c\u958b\u3055\u308c\u306a\u3044","slow_loading":"\u30de\u30c3\u30d7\u306e\u8aad\u307f\u8fbc\u307f\u304c\u9045\u304f\u3001\u58ca\u308c\u3066\u3044\u308b\u3088\u3046\u306b\u898b\u3048\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059"},"psv":{"twoFingers":"2\u672c\u306e\u6307\u3067\u79fb\u52d5\u3057\u307e\u3059","ctrlZoom":"Ctrl + \u30b9\u30af\u30ed\u30fc\u30eb\u3067\u753b\u50cf\u3092\u62e1\u5927\u3057\u307e\u3059","loadError":"\u753b\u50cf\u3092\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093"},"maplibre":{"GeolocateControl.FindMyLocation":"\u81ea\u5206\u306e\u4f4d\u7f6e\u3092\u8868\u793a","GeolocateControl.LocationNotAvailable":"GPS\u306f\u5229\u7528\u3067\u304d\u307e\u305b\u3093"}}')},6920:ae=>{"use strict";ae.exports=JSON.parse('{"pnx":{"zoomIn":"Zoom in","zoom":"Zoom","zoomOut":"Zoom uit","moveDown":"Naar beneden","search_user":"Zoek een gebruikersnaam\u2026","moveUp":"Ga omhoog","share_rss":"RSS-feed","loading_labels_serious":["\ud83d\uddfa\ufe0f Kaart aan het laden","\ud83d\udda5\ufe0f API opvragen","\ud83d\uddbc\ufe0f Miniatuurweergaven laden","\ud83d\udd0d EXIF metadata analyseren","\ud83c\udfd8\ufe0f 3D-rendering","\ud83d\udcf7 360\xb0 afbeelden initialiseren","\ud83d\udfe0 Kleur balancering","\ud83d\udcaf Bereken kwaliteits-score \xa9","\ud83d\udce1 Updates downloaden","\ud83c\udf0d Kaarttegels ophalen","\ud83d\udcf8 Schaduwen verwerken"],"share_embed_docs":"Lees meer over embedded instellingen","sequence_pause":"Pauzeer sequentie","sequence_prev":"Vorige afbeelding uit de sequentie","id":"iD","josm":"JOSM","sequence_more":"Meer afspeelmogelijkheden","sequence_speed":"Afspeel snelheid","edit_osm":"OSM aanpassen","moveLeft":"Naar links","moveRight":"Naar rechts","moveMiddle":"Middelpunt","expand":"Vergroot","show_psv":"Toon de afbeeldingsviewer","show_map":"Toon de kaart","options":"Opties","filters":"Filters","layers":"Lagen","search":"Zoek","search_empty":"Geen resultaat gevonden","search_address":"Zoek een adres, stad\u2026","share":"Deel","share_links":"Links","share_page":"Link naar deze foto","share_image":"HD afbeelding","share_embed":"Embedden op uw website","share_print":"Afdrukken","copy":"Kopieer","copied":"Gekopieerd","error":"We hebben een probleem\u2026","sequence_next":"Volgende afbeelding van de sequentie","error_click":"Klik om verder te gaan","error_retry":"Probeer later opnieuw","legend_license":"Licentie: {l}","legend_title":"Toon gegevens van de afbeelding","sequence_play":"Speel deze sequentie af","expand_info":"De widget op de volledige pagina weergeven","minimize":"Verberg deze widget, je kan hem terug tonen met de knop linksonder","loading_labels_fun":["\ud83e\udd8c Detectie verkeersborden overstekende herten","\ud83d\ude98 Panoramax auto zoeken \xa9","\u2615 Cafe\xefne-injectie","\ud83d\ude00 Gelukt, je kaart is gekaart!","\ud83d\udc08 Foto\'s delen van katten","\ud83d\ude34 Uitstelgedrag verminderen","\ud83e\uded6 Thee zetten","\ud83d\udc27 Broncode openen","\ud83d\ude87 Indexering metrostations","\ud83e\uddf9 Metadata opschonen","\ud83d\ude92 Foto\'s van brandweerkazernes versturen","\ud83d\udeb2 Fiets- en wandelpaden bijwerken","\ud83d\ude89 Perron doorgang","\ud83d\udef0\ufe0f Satellieten zoeken","\ud83d\udc65 Personas opslaan","\ud83e\udd5e Pannenkoekenhuizen localiseren","\ud83e\uddd1\u200d\ud83d\udcbb Interface debuggen","\ud83d\udcc8 Statistieken verhogen","\ud83e\udd16 Semantiek aanleren","\ud83c\udfa8 Interface herontwerpen","\ud83d\udcc5 Fotomappingparty\'s plannen","\ud83e\uddc0 Kazen laten rijpen","\ud83c\udf04 Prachtige zonneschijn berekenen","\ud83c\udf0a Meten van het hoogwater"],"share_rss_title":"RSS-feed van nieuwe reeksen in het nu zichtbare kaartgebied","josm_live":"Schakel JOSM automatische synchronisatie in bij het laden van afbeeldingen","minimize_short":"Verbergen","error_psv":"Photo Sphere Viewer werd niet correct geladen","error_nopic":"Geen foto beschikbaar op de aangegeven locatie","error_api":"De fotoserver is niet beschikbaar","error_webgl":"WebGL wordt niet ondersteund door je browser","error_api_compatibility":"De fotoserver is niet compatibel met deze viewer","filter_date_1month":"1 maand","filter_date_1year":"1 jaar","filter_user":"Gebruiker","filter_user_mypics":"Mijn foto\'s","filter_picture":"Afbeeldingstype","picture_flat":"Klassiek","picture_360":"360\xb0","filter_qualityscore":"Kwaliteitsscore","qualityscore_doc_2":"De score wordt getoond als een letter A/B/C/D/E (waarbij A het beste is en E het slechtse), en wordt grafisch weergegeven volgens deze schaal:","qualityscore_doc_link":"Meer weten over de Kwaliteitsscore","map_background":"Kaartachtergrond","map_background_aerial":"Satelliet","map_background_streets":"Straten","map_theme":"Kaartthema","map_theme_default":"Klassiek","map_theme_age":"Opnamedatum","map_theme_age_3":"< 1 jaar","map_theme_age_4":"< 1 maand","filter_qualityscore_help":"Klik om aan- of uit te schakelen","report_failure":"Er is een fout opgetreden bij het aanmaken van het rapport: {e}. Probleem later opnieuw.","map_theme_score":"Kwaliteitsscore","contrast":"Afbeeldingscontrast verhogen","metadata":"Metadata van de foto","metadata_camera_make":"Fabrikant","filter_date":"Datum","filter_zoom_in":"Zoom in om dit filter te zien","metadata_general_license_link":"De volledige beschrijving van de licentie bekijken","metadata_general_seqid":"Serie","metadata_general_picid_link":"Ga naar de JSON-beschrijving van de foto","metadata_general_seqid_link":"Ga naar de JSON-beschrijving van de sequentie","metadata_general_author":"Auteur","error_josm":"JOSM antwoord niet, is het actief en is afstandsbediening ingeschakeld?","qualityscore_title":"Over de kwaliteitsscore","metadata_general_license":"Licentie","error_pic":"The gevraagde foto werd niet gevonden","map_theme_age_2":"< 2 jaar","metadata_general_picid":"Afbeelding","metadata_general_date":"Opnamedatum","map_theme_type":"Cameratype","qualityscore_doc_1":"Panoramax toont een Kwaliteitsscore voor elke foto. Dit vergemakkelijkt filtering en laat toe om foto\'s van hoge kwaliteit te vinden.","qualityscore_doc_3":"Hij wordt berekend op basis van de GPS-nauwkeurigheid en resolutie van de foto. Een professioneel systeem zal een A-score hebben, een 360\xb0 actiecamera een B-score, en een smartphone een C/D/E-score.","map_theme_age_1":"> 2 jaar","report_details_placeholder":"Je kan, optioneel, details over het probleem toevoegen","metadata_camera":"Apparaat","metadata_camera_model":"Model","metadata_camera_type":"Type","metadata_camera_resolution":"Resolutie","metadata_camera_focal_length":"Brandpuntsafstand","metadata_location":"Positie","metadata_location_longitude":"Longitude","metadata_location_latitude":"Latitude","metadata_location_orientation":"Richting","metadata_location_precision":"Nauwkeurigheid van de positionering","metadata_quality":"Kwaliteit","metadata_quality_help":"Meer weten over de Kwaliteitsscore","metadata_quality_score":"Globale score","metadata_quality_gps_score":"Positioneringsscore","metadata_quality_resolution_score":"Resolutiescore","metadata_quality_missing":"geen info in de afbeelding","metadata_exif":"EXIF","metadata_exif_name":"Tag","metadata_exif_value":"Waarde","report":"Rapporteer","report_auth":"Dit rapport zal worden verstuurd met je account \\"{a}\\"","report_nature_label":"Oorzaak van het probleem","report_nature":{"":"Selecteer de aard van het probleem \u2026","blur_missing":"Het gezicht van een persoon of een nummerplaat is zichtbaar","blur_excess":"Een overbodige vervaging werd toegepast op een object","inappropriate":"De foto is ongepast (ongerelateerd, naaktheid \u2026)","privacy":"Een private weg of een privaat eigendom is zichtbaar","picture_low_quality":"De foto is van lage kwaliteit","mislocated":"De foto is slecht gepositioneerd","copyright":"De foto schendt het auteursrecht","other":"Een ander soort probleem"},"report_whole_sequence":"Dit betreft de volledige sequentie","report_details":"Aanvullende details","report_email":"Je e-mail","report_email_placeholder":"Optioneel","report_submit":"Verzenden","report_wait":"Rapport verzenden \u2026","report_success":"Het rapport werd succesvol verzonden. Het zal zo snel mogelijk behandeld worden.","whats_panoramax":"Panoramax is de geo-commons voor foto\'s van gebieden.","contribute_id":"Bijdragen aan OpenStreetMap met de iD-editor","geo_uri":"Externe app","semantics_hide_all_tags":"Verberg alle tags","semantics_key":"Sleutel","semantics_value":"Waarde","semantics_key_doc":"Meer weten over deze sleutel","semantics_value_doc":"Meer weten over deze tag","semantics_title":"Tags","semantics_tags":"{nb} tags","semantics_features":"Gedetecteerde eigenschappen","semantics_features_none":"Er is nog geen eigenschap gedetecteerd of geannoteerd in deze afbeelding.","semantics_features_default_title":"Eigenschap #{nb}","semantics_features_subtitle":"{nb} geassocieerde eigenschappen","semantics_show_all_tags":"Toon alle tags","metadata_general_instance":"Bron instance","semantics_annotation_tooltip":"Klik om details te zien","semantics_tags_picture":"Afbeelding tags","semantics_tags_picture_none":"Er zijn nog geen tags ingesteld voor deze afbeelding.","semantics_qualifiers":"Kwalificaties","semantics_show_annotations":"afbeelding-aantekeningen weergeven","semantics_hide_annotations":"afbeelding-aantekeningen verbergen","semantics_wikidata_properties":{"P31":"Instance van","P279":"subklasse van","P361":"onderdeel van"},"metadata_exif_doc":"Documenten voor EXIF-tags","metadata_exif_doc_title":"Ga naar documentatie van Exiv2 voor volledige informatie over definities van EXIF- en XMP-tags","metadata_location_copy":"Kopieer {v}","metadata_location_copy_more":"Meer kopieeropties voor co\xf6rdinaten","metadata_general_copy_picid":"Kopieer afbeelding ID","filter_date_6months":"6 maanden","picture_360_long":"Panorama afbeelding","metadata_summary":"Samenvatting","metadata_general_copy_id":"Kopieer ID","picture_flat_long":"Klassieke afbeelding","metadata_location_coordinates":"Co\xf6rdinaten (lengtegraad, breedtegraad)","picture_all":"Alles","semantics_zero_annotations":"Geen aantekeningen bij deze afbeelding","semantics_hashtags":"Foto-hashtags","panoramax":"Panoramax","semantics_editor_error":"De syntax is ongeldig. Je tags moeten eruit zien als:\\nsleutel=waarde\\nprefix|sleutel=waarde\\nprefix|sleutel[qualif_sleutel=qualif_waarde]=waarde\\n\\nMaximale lengte van de sleutel: 256 karakters, maximale lengte van de waarde: 2048 karakters.","semantics_save":"Je wijzigingen opslaan","semantics_editor_example":"sleutel=waarde\\nprefix|sleutel=waarde","semantics_edit":"De attributen bewerken","semantics_undo":"Je bewerkingen annuleren","semantics_send_ok":"Je bewerkingen werden succesvol verzonden","semantics_cantsave_invalid":"Kan wijzigingen niet opslaan, input is ongeldig","semantics_send_fail":"Wijzigingen opslaan mislukt, probeer later opnieuw","semantics_save_drawn_annotation":"Bewaar positie","semantics_undo_drawn_annotation":"Annuleer","semantics_save_drawn_annotation_incomplete":"Er moet een rechthoek getekend worden die op de afbeelding past voor validatie mogelijk is","semantics_delete_annotation":"verwijder deze aantekening","semantics_delete_annotation_confirm":"Wil je deze aantekening echt verwijderen ?","semantics_add_annotation":"Voeg aantekening toe","semantics_draw_annotation":"Klik eerst op de hoek van het element dat je wilt weergeven. Klik vervolgens op de tegenoverliggende hoek. Je kunt nogmaals op een hoek klikken om deze te verplaatsen."},"psv":{"twoFingers":"Gebruik twee vingers om te navigeren","ctrlZoom":"Gebruik ctrl + scroll om de afbeelding in en uit te zoomen","loadError":"Het panorama kan niet worden geupload"},"maplibre":{"GeolocateControl.FindMyLocation":"Mijn locatie zoeken","GeolocateControl.LocationNotAvailable":"Locatitie niet beschikbaar"},"map":{"loading":"Laden \u2026","slow_loading":"De kaart laadt traag en kan er gebroken uitzien","thumbnail":"Thumbnail van de aangeduide foto","not_public":"Niet openbaar zichtbaar","map_data":"Kaartdata: {m}","more_panoramax":"Meer weten over Panoramax"}}')},9026:ae=>{"use strict";ae.exports=JSON.parse('{"pnx":{"moveRight":"Przesu\u0144 w prawo","sequence_speed":"Pr\u0119dko\u015b\u0107 odtwarzania","metadata_camera_model":"Model","search_address":"Szukaj adres, miasto\u2026","zoom":"Przybli\u017cenie","zoomIn":"Przybli\u017c","moveUp":"Przesu\u0144 w g\xf3r\u0119","moveDown":"Przesu\u0144 w d\xf3\u0142","moveLeft":"Przesu\u0144 w lewo","moveMiddle":"Wycentruj widok","expand":"Rozszerz","show_psv":"Poka\u017c przegl\u0105dark\u0119 zdj\u0119\u0107","show_map":"Poka\u017c map\u0119","options":"Opcje","filters":"Filtry","layers":"Warstwy","search":"Szukaj","search_empty":"Brak wynik\xf3w","search_user":"Szukaj nazwy u\u017cytkownika\u2026","share":"Udost\u0119pnij","share_links":"Linki","share_page":"Link do tej strony","share_rss":"Kana\u0142 RSS","share_print":"Drukuj","copy":"Kopiuj","copied":"Skopiowano","error":"Mamy problem\u2026","error_click":"Kliknij, aby kontynuowa\u0107","error_retry":"Prosz\u0119 spr\xf3buj p\xf3\u017aniej","sequence_next":"Nast\u0119pne zdj\u0119cie w sekwencji","sequence_pause":"Spauzuj sekwencj\u0119","sequence_prev":"Poprzednie zdj\u0119cie w sekwencji","sequence_more":"Wi\u0119cej opcji odtwarzania","legend_license":"Licencja: {l}","legend_title":"Poka\u017c szczeg\xf3\u0142y zdj\u0119cia","edit_osm":"Edytuj OSM","loading_labels_serious":["\ud83d\uddfa\ufe0f Wczytywanie danych mapy","\ud83d\udda5\ufe0f Odpytywanie API","\ud83d\uddbc\ufe0f Wczytywanie miniaturek","\ud83d\udd0d Analizowanie metadanych EXIF","\ud83c\udfd8\ufe0f Renderowanie 3D","\ud83d\udcf7 Inicjowanie zdj\u0119\u0107 360\xb0","\ud83d\udfe0 Balansowanie kolor\xf3w","\ud83d\udcaf Obliczanie oceny jako\u015bci \xa9"],"map_theme_age_2":"< 2 lata","map_theme_age_1":"> 2 lata","map_theme_age":"Data zrobienia","filter_picture":"Typ zdj\u0119cia","map_theme_age_3":"< rok","map_theme_age_4":"< miesi\u0105c","map_theme_type":"Typ aparatu","metadata":"Metadane zdj\u0119cia","metadata_general_picid":"Identyfikator zdj\u0119cia","metadata_general_seqid":"Identyfikator sekwencji","metadata_general_license":"Licencja","metadata_general_author":"Autor","metadata_camera":"Aparat","metadata_camera_type":"Typ","metadata_camera_resolution":"Rozdzielczo\u015b\u0107","metadata_location":"Lokalizacja","metadata_exif":"EXIF / XMP","metadata_quality_missing":"Brak warto\u015bci ustawionej w zdj\u0119ciu","metadata_exif_name":"Tag","metadata_exif_value":"Warto\u015b\u0107","report":"Zg\u0142o\u015b zdj\u0119cie","report_nature":{"privacy":"Prywatna droga lub w\u0142asno\u015b\u0107 widoczna","mislocated":"Zdj\u0119cie jest w z\u0142ym miejscu na mapie","copyright":"Zdj\u0119cie narusza prawa autorskie","picture_low_quality":"Zdj\u0119cie jest bardzo niskiej jako\u015bci","other":"Inny problem","":"Wybierz typ problemu\u2026","blur_missing":"Twarz osoby lub rejestracja samochodu jest widoczna","blur_excess":"Obiekt, kt\xf3ry nie wymaga zamazania jest zamazany","inappropriate":"Zdj\u0119cie jest niestosowne (niezwi\u0105zane, nago\u015b\u0107\u2026)"},"zoomOut":"Oddal","report_whole_sequence":"Dotyczy ca\u0142ej sekwencji","report_details":"Dodatkowe szczeg\xf3\u0142y","report_email":"Tw\xf3j adres email","report_email_placeholder":"Opcjonalne","report_submit":"Wy\u015blij","report_wait":"Wysy\u0142anie zg\u0142oszenia\u2026","report_success":"Zg\u0142oszenie zosta\u0142o wys\u0142ane. Zostanie przejrzane tak szybko jak to mo\u017cliwe.","share_rss_title":"Kana\u0142 RSS nowych sekwencji na widocznym obszarze mapy","loading_labels_fun":["\ud83e\udd8c Wykrywanie znak\xf3w przechodzenia jeleni",null,"\u2615 Wstrzykiwanie kofeiny","\ud83d\ude00 U\u015bmiechnij si\u0119, jeste\u015b mapowany!","\ud83d\udc08 Udost\u0119pnianie zdj\u0119\u0107 kot\xf3w","\ud83d\ude34 Zmniejszania prokrastynacji","\ud83e\uded6 Parzenie herbaty","\ud83d\udc27 Otwieranie kodu \u017ar\xf3d\u0142owego","\ud83d\ude87 Indeksowanie stacji metra","\ud83e\uddf9 Czyszczenie metadanych","\ud83d\ude92 Przesy\u0142anie zdj\u0119\u0107 remiz",null,"\ud83d\ude89 Przechodzenie peron\xf3w stacji","\ud83d\udef0\ufe0f Wyszukiwanie satelit",null,"\ud83d\udc1f Szukanie sklep\xf3w z frytkami i ryb\u0105","\ud83e\uddd1\u200d\ud83d\udcbb Interfejs debugowania","\ud83d\udcc8 Zwi\u0119kszanie statystyk"],"share_embed_docs":"Przeczytaj wi\u0119cej o konfiguracji osadzenia","sequence_play":"Odtw\xf3rz t\u0119 sekwencj\u0119","josm_live":"W\u0142\u0105cz automatyczn\u0105 synchronizacj\u0119 JOSM przy \u0142adowaniu zdj\u0119\u0107","error_api":"Serwer zdj\u0119\u0107 nie jest dost\u0119pny","error_webgl":"WebGL nie jest obs\u0142ugiwany przez t\u0119 przegl\u0105dark\u0119","error_api_compatibility":"Serwer zdj\u0119\u0107 nie jest kompatybilny z t\u0105 wersj\u0105 przegl\u0105darki","filter_date":"Data","filter_date_1month":"1 miesi\u0105c","filter_date_1year":"1 rok","filter_user":"U\u017cytkownik","filter_user_mypics":"Moje zdj\u0119cia","filter_zoom_in":"Przybli\u017c, aby filtry by\u0142y widoczne","picture_flat":"Klasyczne","picture_360":"360\xb0","filter_qualityscore":"Ocena jako\u015bci","map_background":"Podk\u0142ad mapowy","map_background_aerial":"Zdj\u0119cia lotnicze","map_background_streets":"Ulice","map_theme":"Motyw mapy","map_theme_default":"Klasyczny","map_theme_score":"Ocena jako\u015bci","contrast":"W\u0142\u0105cz wy\u017cszy kontrast zdj\u0119cia","metadata_general_picid_link":"Id\u017a do opisu zdj\u0119cia w JSON","metadata_general_seqid_link":"Id\u017a do opisu sekwencji w JSON","metadata_general_license_link":"Id\u017a do strony z pelnym opisem licencji","metadata_general_date":"Data zrobienia","metadata_camera_make":"Marka","metadata_camera_focal_length":"Ogniskowa","metadata_location_longitude":"D\u0142ugo\u015b\u0107 geograficzna","metadata_location_latitude":"Szeroko\u015b\u0107 geograficzna","metadata_location_orientation":"Kierunek robienia zdj\u0119cia","metadata_location_precision":"Precyzja lokalizacji","metadata_quality":"Ocena jako\u015bci","metadata_quality_help":"Dowiedz si\u0119 wi\u0119cej o ocenie jako\u015bci","metadata_quality_score":"Ocena globalna","metadata_quality_gps_score":"Ocena pozycji","metadata_quality_resolution_score":"Ocena rozdzielczo\u015bci","report_auth":"To zg\u0142oszenie b\u0119dzie wys\u0142anie przy pomocy Twojego konta \\"{a}\\"","report_nature_label":"Typ problemu","report_details_placeholder":"Opcjonalnie, mo\u017cesz doda\u0107 szczeg\xf3\u0142y o problemie","report_failure":"B\u0142\u0105d wyst\u0105pi\u0142 podczas tworzenia zg\u0142oszenia: {e}. Prosz\u0119 spr\xf3buj ponownie.","filter_qualityscore_help":"Kliknij, aby w\u0142\u0105czy\u0107 lub wy\u0142\u0105czy\u0107","error_josm":"JOSM nie odpowiada, czy jest uruchomiony i czy dost\u0119p zdalny jest w\u0142\u0105czony?"},"psv":{"twoFingers":"U\u017cyj dw\xf3ch palc\xf3w do nawigacji","ctrlZoom":"U\u017cyj ctrl + rolka myszy, aby powi\u0119kszy\u0107 zdj\u0119cie","loadError":"Panorama nie mo\u017ce by\u0107 za\u0142adowana"},"maplibre":{"GeolocateControl.FindMyLocation":"Znajd\u017a moj\u0105 lokalizacj\u0119","GeolocateControl.LocationNotAvailable":"Lokalizacja niedost\u0119pna"},"map":{"thumbnail":"Miniaturki najechanego zdj\u0119cia","not_public":"Niewidoczne publicznie","slow_loading":"Mapa \u0142aduje si\u0119 wolno i mo\u017ce si\u0119 wydawaj popsuta","loading":"\u0141adowanie\u2026"}}')},6611:ae=>{"use strict";ae.exports=JSON.parse('{"pnx":{"loading_labels_fun":["\ud83e\udda5 Detectando placas de travessia de bichos-pregui\xe7a","\ud83d\ude98 Procurando Panoramax Car \xa9","\u2615 Injetando cafe\xedna","\ud83d\ude00 Sorria, voc\xea est\xe1 mapeado!","\ud83d\udc08 Compartilhando imagens de gatos","\ud83d\ude34 Reduzindo a procrastina\xe7\xe3o","\u2615 Preparando um cafezinho","\ud83d\udc27 Abrindo c\xf3digo-fonte","\ud83d\ude87 Indexando as esta\xe7\xf5es de metr\xf4","\ud83e\uddf9 Limpeza de metadados","\ud83d\ude92 Enviando fotos do quartel dos bombeiros","\ud83d\udeb2 Atualiza\xe7\xe3o das ciclovias","\ud83d\ude89 Passagem pela plataforma da esta\xe7\xe3o","\ud83d\udef0\ufe0f Procurando sat\xe9lites","\ud83d\udea1 Subindo o P\xe3o de A\xe7\xfacar de telef\xe9rico","\ud83c\udf5f Localizando lanchonetes","\ud83e\uddd1\u200d\ud83d\udcbb Depurando a interface","\ud83d\udcc8 Incrementando as estat\xedsticas","\ud83c\udff0 Fortificando fortalezas em Fortaleza","\ud83c\udfa8 Redesenho da interface","\ud83d\udc2c Procurando o boto-rosa no rio Amazonas","\ud83e\uddc0 Maturando os queijos minas","\ud83c\udf04 Calculando a insola\xe7\xe3o em Ubatuba","\ud83c\udf0a Medindo as mar\xe9s altas"],"zoom":"Zoom","zoomOut":"Diminuir o zoom","zoomIn":"Ampliar o zoom","moveUp":"Mover para cima","moveDown":"Mover para baixo","moveLeft":"Mover para a esquerda","expand":"Expandir","expand_info":"Fazer com que o widget apare\xe7a em p\xe1gina inteira","show_psv":"Exibir o visualizador de imagens","show_map":"Exibir o mapa","minimize_short":"Ocultar","options":"Op\xe7\xf5es","filters":"Filtros","layers":"Camadas","search":"Pesquisa","search_empty":"Nenhum resultado encontrado","search_address":"Pesquisar um endere\xe7o, cidade\u2026","search_user":"Pesquisar um nome de usu\xe1rio\u2026","share":"Compartilhar","share_links":"Links","share_page":"Link para esta foto","share_image":"Imagem HD","share_rss":"Feed RSS","share_embed":"Incorporar no seu site","share_embed_docs":"Leia mais sobre a configura\xe7\xe3o de incorpora\xe7\xe3o","share_print":"Imprimir","panoramax":"Panoramax","whats_panoramax":"Panoramax \xe9 o geo-reposit\xf3rio comum para imagens de territ\xf3rios.","copy":"Copiar","copied":"Copiado","error":"Temos um problema\u2026","error_retry":"Por favor, tente novamente mais tarde","sequence_play":"Reproduzir esta sequ\xeancia","sequence_pause":"Pausar sequ\xeancia","sequence_next":"Pr\xf3xima imagem na sequ\xeancia","sequence_more":"Mais op\xe7\xf5es de reprodu\xe7\xe3o","sequence_speed":"Velocidade de reprodu\xe7\xe3o","legend_license":"Licen\xe7a: {l}","legend_title":"Exibir detalhes da imagem","id":"iD","geo_uri":"Aplicativo externo","josm":"JOSM","josm_live":"Ativar a sincroniza\xe7\xe3o autom\xe1tica do JOSM ao carregar imagens","loading_labels_serious":["\ud83d\uddfa\ufe0f Carregando dados do mapa","\ud83d\udda5\ufe0f Consultando a API","\ud83d\uddbc\ufe0f Carregando miniaturas","\ud83d\udd0d Analisando os metadados EXIF","\ud83c\udfd8\ufe0f Renderiza\xe7\xe3o 3D","\ud83d\udcf7 Inicializando imagens em 360\xb0","\ud83d\udfe0 Ajuste de cores","\ud83d\udcaf Computando o Quality Score \xa9","\ud83d\udce1 Baixando atualiza\xe7\xf5es","\ud83c\udf0d Buscando blocos de mapa","\ud83d\udcf8 Processando sombras"],"moveMiddle":"Centralizar a visualiza\xe7\xe3o","share_rss_title":"Feed RSS de novas sequ\xeancias na \xe1rea do mapa atualmente vis\xedvel","contribute_id":"Contribua para o OpenStreetMap com o editor iD","moveRight":"Mover para a direita","sequence_prev":"Imagem anterior na sequ\xeancia","minimize":"Ocultar este widget. Voc\xea pode exibi-lo novamente usando o bot\xe3o no canto inferior esquerdo","error_click":"Continuar","semantics_features_none":"Ainda n\xe3o foi desenhado nenhuma caracter\xedstica nesta imagem.","semantics_draw_annotation":"Voc\xea pode desenhar o objeto que deseja adicionar na imagem (opcional).","semantics_login_needed":"Para editar etiquetas ou caracter\xedsticas de imagens, voc\xea precisa fazer login na inst\xe2ncia Panoramax {n}. Deseja fazer login?","filter_zoom_in":"Amplie o mapa para ver este filtro","picture_360":"360\xb0","picture_flat_long":"Imagem cl\xe1ssica","filter_qualityscore":"Pontua\xe7\xe3o de qualidade","filter_qualityscore_help":"Clique para ativar ou desativar","qualityscore_title":"Sobre a pontua\xe7\xe3o de qualidade","qualityscore_doc_2":"A nota \xe9 apresentada aos usu\xe1rios como uma pontua\xe7\xe3o A/B/C/D/E (A \xe9 a melhor, E a pior) e mostrada graficamente atrav\xe9s desta escala:","semantics_features":"Caracter\xedsticas da imagem","semantics_features_default_title":"Etiqueta {nb}","semantics_features_subtitle":"{nb} propriedades associadas","semantics_annotation_tooltip":"Clique para ver detalhes","semantics_hide_all_tags":"Ocultar todas as etiquetas","semantics_key":"Chave","semantics_value":"Valor","semantics_value_doc":"Saiba mais sobre esta etiqueta","semantics_tags_picture":"Etiquetas de imagem","qualityscore_doc_3":"\xc9 calculada com base na precis\xe3o do GPS e na resolu\xe7\xe3o da imagem. Um sistema profissional ter\xe1 uma classifica\xe7\xe3o A, uma c\xe2mera de a\xe7\xe3o 360\xb0 ter\xe1 uma classifica\xe7\xe3o B e um smartphone ter\xe1 uma classifica\xe7\xe3o C/D/E.","error_psv":"O Photo Sphere Viewer n\xe3o est\xe1 carregando corretamente","error_pic":"A imagem solicitada n\xe3o foi encontrada","error_api":"O servidor de imagens n\xe3o est\xe1 dispon\xedvel","error_webgl":"O WebGL n\xe3o \xe9 compat\xedvel com o seu navegador","error_api_compatibility":"O servidor de imagens n\xe3o \xe9 compat\xedvel com esta vers\xe3o do visualizador","filter_date":"Data","filter_date_1month":"1 m\xeas","filter_date_6months":"6 meses","filter_date_1year":"1 ano","filter_user":"Usu\xe1rio","filter_user_mypics":"Minhas imagens","error_josm":"O JOSM n\xe3o responde. Ele est\xe1 sendo executado e est\xe1 ativado o acesso remoto?","filter_picture":"Tipo de imagem","picture_flat":"Cl\xe1ssica","picture_360_long":"Imagem panor\xe2mica","qualityscore_doc_link":"Saiba mais sobre a Pontua\xe7\xe3o de Qualidade","metadata_general_picid_link":"Ir para a descri\xe7\xe3o JSON da imagem","metadata_camera_resolution":"Resolu\xe7\xe3o","metadata_exif_doc":"Documenta\xe7\xe3o para etiquetas EXIF","metadata_exif_doc_title":"Acesse a documenta\xe7\xe3o do Exiv2 para obter detalhes completos sobre as defini\xe7\xf5es das tags EXIF e XMP","semantics_title":"Etiquetas","semantics_show_all_tags":"Mostrar todas as etiquetas","semantics_tags_picture_none":"Ainda n\xe3o foram definidas etiquetas para esta imagem.","semantics_send_fail":"N\xe3o \xe9 poss\xedvel salvar suas altera\xe7\xf5es, por favor, tente novamente mais tarde","report_details_placeholder":"Opcionalmente, voc\xea pode adicionar detalhes sobre o problema","report_nature":{"inappropriate":"A imagem \xe9 inadequada (sem rela\xe7\xe3o, nudez\u2026)","":"Selecione o tipo do problema\u2026","blur_missing":"O rosto de uma pessoa ou a placa de um carro s\xe3o vis\xedveis","blur_excess":"Um desfoque desnecess\xe1rio foi aplicado a um objeto","privacy":"Um caminho ou propriedade privada \xe9 vis\xedvel","picture_low_quality":"A imagem \xe9 de baixa qualidade","mislocated":"A imagem est\xe1 mal posicionada no mapa","copyright":"A imagem viola direitos autorais","other":"Qualquer outro tipo de problema"},"error_nopic":"Nenhuma imagem dispon\xedvel na posi\xe7\xe3o indicada","picture_all":"Todas","metadata_location_copy_more":"Mais op\xe7\xf5es de c\xf3pia de coordenadas","semantics_tags":"{nb} etiquetas","semantics_zero_annotations":"Nenhuma caracter\xedstica desenhada nesta imagem","semantics_save_drawn_annotation_incomplete":"Voc\xea deve desenhar um ret\xe2ngulo que se encaixe na imagem antes de validar","map_background":"Fundo do mapa","map_background_aerial":"A\xe9reo","map_background_streets":"Ruas","map_theme":"Tema do mapa","map_theme_default":"Cl\xe1ssico","map_theme_age":"Data da captura","map_theme_age_1":"> 2 anos","map_theme_age_2":"< 2 anos","map_theme_age_3":"< 1 ano","map_theme_age_4":"< 1 m\xeas","map_theme_type":"Tipo de c\xe2mera","contrast":"Ativar maior contraste da imagem","metadata":"Metadados de imagem","metadata_summary":"Resumo","metadata_general_copy_id":"Copiar ID","metadata_general_copy_picid":"Copiar ID da imagem","metadata_general_picid":"Imagem","metadata_general_seqid":"Sequ\xeancia","metadata_general_seqid_link":"Ir para a descri\xe7\xe3o JSON da sequ\xeancia","metadata_general_author":"Autor","metadata_general_license":"Licen\xe7a","metadata_general_license_link":"Consulte a descri\xe7\xe3o completa da licen\xe7a","metadata_general_date":"Data da captura","metadata_general_instance":"Inst\xe2ncia de origem","metadata_camera":"C\xe2mera","metadata_camera_make":"Marca","metadata_camera_model":"Modelo","metadata_camera_type":"Tipo","metadata_camera_focal_length":"Dist\xe2ncia focal","metadata_location":"Posi\xe7\xe3o","metadata_location_coordinates":"Coordenadas (longitude, latitude)","metadata_location_orientation":"Dire\xe7\xe3o","metadata_location_precision":"Precis\xe3o de posicionamento","metadata_location_copy":"Copiar {v}","metadata_quality":"Qualidade","metadata_quality_help":"Saiba mais sobre a Pontua\xe7\xe3o de Qualidade","metadata_quality_score":"Pontua\xe7\xe3o global","metadata_quality_gps_score":"Pontua\xe7\xe3o de posicionamento","metadata_quality_resolution_score":"Pontua\xe7\xe3o de resolu\xe7\xe3o","metadata_quality_missing":"nenhum valor definido na imagem","metadata_exif":"EXIF","metadata_exif_name":"Etiqueta","metadata_exif_value":"Valor","semantics_editor_error":"A sintaxe est\xe1 inv\xe1lida. Suas etiquetas podem ficar assim:\\nchave=valor\\nprefixo|chave=valor\\nprefixo|chave[qualif_chave=qualif_val]=valor\\n\\nO comprimento m\xe1ximo da chave \xe9 de 256 caracteres, e o comprimento m\xe1ximo do valor \xe9 de 2048 caracteres.","report":"Denunciar","report_auth":"Este relat\xf3rio ser\xe1 enviado usando sua conta \\"{a}\\"","report_nature_label":"Causa do problema","semantics_qualifiers":"Qualificadores","semantics_show_annotations":"Exibir caracter\xedsticas da imagem","semantics_hide_annotations":"Ocultar caracter\xedsticas da imagem","semantics_add_annotation":"Adicionar uma nova etiqueta","semantics_save_drawn_annotation":"Salvar posi\xe7\xe3o","semantics_undo_drawn_annotation":"Cancelar","semantics_delete_annotation":"Excluir esta caracter\xedstica","semantics_delete_annotation_confirm":"Voc\xea realmente deseja excluir esta etiqueta ?","semantics_hashtags":"Hashtags da imagem","semantics_wikidata_properties":{"P31":"inst\xe2ncia de","P279":"subclasse de","P361":"parte de"},"semantics_editor_example":"chave=valor\\nprefixo|chave=valor","semantics_edit":"Editar atributos","semantics_save":"Salvar suas altera\xe7\xf5es","semantics_undo":"Cancelar suas edi\xe7\xf5es","semantics_cantsave_invalid":"N\xe3o \xe9 poss\xedvel salvar as altera\xe7\xf5es, entrada \xe9 inv\xe1lida","semantics_send_ok":"Suas edi\xe7\xf5es foram enviadas com \xeaxito","report_whole_sequence":"Isso diz respeito a toda a sequ\xeancia","report_details":"Detalhes adicionais","report_email":"Seu e-mail","report_email_placeholder":"Opcional","report_submit":"Enviar","report_wait":"Enviando relat\xf3rio\u2026","qualityscore_doc_1":"O Panoramax oferece uma pontua\xe7\xe3o de qualidade para cada imagem. Isso permite uma f\xe1cil filtragem do mapa e uma exibi\xe7\xe3o abrangente da disponibilidade de imagens de alta qualidade.","map_theme_score":"Pontua\xe7\xe3o de qualidade","report_success":"O relat\xf3rio foi enviado com sucesso. Ele ser\xe1 analisado assim que poss\xedvel.","report_failure":"Ocorreu um erro ao criar o relat\xf3rio: {e}. Tente novamente mais tarde.","semantics_key_doc":"Saiba mais sobre esta chave","semantics_doc":"Ajuda","semantics_erase_annotation":"Apagar caracter\xedstica desenhada","semantics_doc_title":"Sobre etiquetas","semantics_doc_info1":"D\xea contexto a uma imagem usando etiquetas. Voc\xea pode marc\xe1-la como capturada por carro com a etiqueta transport=car.","semantics_doc_link":"Saiba mais sobre etiquetas","semantics_doc_info3":"Alguns objetos s\xe3o detectados automaticamente com IA: a qualidade n\xe3o \xe9 garantida.","semantics_doc_info2":"Voc\xea tamb\xe9m pode desenhar objetos na imagem: sinais de tr\xe2nsito, equipamentos urbanos\u2026 Marque o que voc\xea v\xea usando as etiquetas existentes. Voc\xea tamb\xe9m pode criar suas pr\xf3prias etiquetas, se necess\xe1rio.","semantics_picture_tags":"Etiqueta de imagem","semantics_sequence_tags":"Etiqueta de sequ\xeancia","semantics_annotation_tags":"Etiqueta de objeto","filter_gps_precision":"Precis\xe3o de localiza\xe7\xe3o","filter_gps_precision_lessthan":"Menos de {n} metros","filter_gps_precision_between":"Entre {n1} e {n2} metros","filter_gps_precision_morethan":"Mais de {n} metros","map_theme_gps":"Precis\xe3o de localiza\xe7\xe3o"},"psv":{"ctrlZoom":"Use ctrl + rolagem para ampliar a imagem","loadError":"O panorama n\xe3o pode ser carregado","twoFingers":"Use does dedos para navegar"},"maplibre":{"GeolocateControl.LocationNotAvailable":"Localiza\xe7\xe3o n\xe3o dispon\xedvel","GeolocateControl.FindMyLocation":"Encontre minha localiza\xe7\xe3o"},"map":{"thumbnail":"Miniatura da imagem ao passar o cursor","not_public":"N\xe3o vis\xedvel publicamente","slow_loading":"O mapa demora a carregar e pode parecer danificado","map_data":"Mapa baseado em {m}","more_panoramax":"Descubra mais sobre o Panoramax","loading":"Carregando\u2026"}}')},991:ae=>{"use strict";ae.exports=JSON.parse('{"psv":{"twoFingers":"Anv\xe4nd tv\xe5 fingrar f\xf6r att panorera","loadError":"Panoramat kan inte laddas","ctrlZoom":"Anv\xe4nd ctrl + scroll f\xf6r att zooma in p\xe5 bilden"},"pnx":{"moveUp":"Flytta upp","zoom":"Zoom","zoomOut":"Zooma ut","zoomIn":"Zooma in","moveDown":"Flytta ner","moveLeft":"Flytta v\xe4nster","moveRight":"Flytta h\xf6ger","moveMiddle":"Centrera vy","expand":"Expandera","show_psv":"Visa bildvisaren","show_map":"Visa kartan","expand_info":"Visa widgeten p\xe5 hela sidan","minimize":"G\xf6m denna flik, du kan visa den igen genom att anv\xe4nda knappen i nedersta v\xe4nstra h\xf6rnet","minimize_short":"G\xf6m","options":"Alternativ","search":"S\xf6k","search_empty":"Inga resultat hittade","filters":"Filter","layers":"Lager","share":"Dela","share_links":"L\xe4nkar","share_page":"L\xe4nka till denna sida","share_image":"HD bild","share_rss":"RSS feed","share_embed":"B\xe4dda in p\xe5 din hemsida","share_embed_docs":"L\xe4s mer om inb\xe4ddad konfiguration","share_print":"Skriv ut","copy":"Kopiera","copied":"Kopierad","error":"Vi har ett problem\u2026","error_click":"Forts\xe4tt","error_retry":"V\xe4nligen f\xf6rs\xf6k igen senare","sequence_next":"N\xe4sta bild i sekvensen","sequence_play":"Spela upp bilder i sekvensen","sequence_pause":"Pausa sekvens","sequence_more":"Mera uppspelningsalternativ","sequence_speed":"Uppspelningshastighet","legend_license":"Licens: {l}","search_address":"S\xf6k en adress, stad\u2026","edit_osm":"Redigera OSM","loading_labels_serious":["\ud83d\uddfa\ufe0f Laddar kartdata","\ud83d\udda5\ufe0f Anropar API","\ud83d\uddbc\ufe0f Laddar miniatyrer","\ud83d\udd0d Analyserar EXIF metadata","\ud83c\udfd8\ufe0f 3D rendering","\ud83d\udcf7 Initialiserar 360\xb0 bilder","\ud83d\udfe0 F\xe4rg balansering","\ud83d\udcaf Ber\xe4kna Kvalitetspo\xe4ng \xa9"],"loading_labels_fun":["\ud83e\udd8c R\xe4knar \xe4lgar","R\xe4knar gula bilar","\u2615 Bunkrar upp med kaffe","Kaj nu simmar du ur bild!","\ud83d\udc08 Delar kattbilder","\ud83d\ude34 Prokastinerar","\ud83e\uded6 Kokar te","\ud83d\udc27 \xd6ppnar k\xe4llkod","\ud83d\ude87 R\xe4knar t\xe5g","\ud83e\uddf9 St\xe4dar upp bland metadata","\ud83d\udc3f\ufe0f R\xe4knar ekorrar","\ud83d\udeb2 R\xe4knar cykelst\xe4ll","\ud83d\ude89 G\xe5r igenom stationer","\ud83d\udef0\ufe0f S\xf6ker satelliter","\ud83e\uddd1\u200d\ud83c\udf73 Lagar k\xf6ttbullar","\ud83e\uddcdSt\xe5r i k\xf6","\ud83e\uddd1\u200d\ud83d\udcbb Fels\xf6ker gr\xe4nsnitt","\ud83d\udcc8 \xd6kar statistik"],"error_psv":"Foto-sf\xe4r visaren laddar inte ordentligt","error_nopic":"Ingen bild finns p\xe5 angiven position","error_api":"Bildservern \xe4r inte tillg\xe4nlig","error_webgl":"WebGL st\xf6ds inte i din webbl\xe4sare","error_api_compatibility":"Bildservern \xe4r inte kompatibel med den h\xe4r visarens version","filter_date":"Datum","filter_date_1month":"1 m\xe5nad","filter_date_1year":"1 \xe5r","filter_user":"Anv\xe4ndare","filter_user_mypics":"Mina bilder","filter_picture":"Bildtyp","filter_zoom_in":"Zooma in f\xf6r att se detta filter","picture_360":"360\xb0","filter_qualityscore_help":"Klicka f\xf6r att sl\xe5 p\xe5 eller av","qualityscore_title":"Om Kvalitetspo\xe4ng","filter_qualityscore":"Kvalitetspo\xe4ng","qualityscore_doc_2":"Kvalitet visas som en skala p\xe5 A/B/C/D/E (A \xe4r b\xe4st, E \xe4r s\xe4mst) och visas grafisk genom skalan:","map_theme_default":"Klassisk","map_theme_age_1":"> 2 \xe5r","map_theme_age_2":"< 2 \xe5r","map_theme_age_3":"< 1 \xe5r","map_theme_age_4":"< 1 m\xe5nad","map_theme_type":"Kameratyp","contrast":"Aktivera h\xf6gre bildkontrast","metadata":"Bildmetadata","metadata_general_picid":"Bild-identifierare","metadata_general_seqid":"Sekvens-identifierare","qualityscore_doc_link":"Mer information om hur Kvalitetspo\xe4ng ber\xe4knas finns i v\xe5r dokumentation.","map_theme_score":"Kvalitetspo\xe4ng","metadata_general_seqid_link":"G\xe5 till JSON beskrivning av sekvensen","metadata_general_author":"Upphovsman","metadata_general_license":"Licens","metadata_general_license_link":"Se full licensbeskrivning","metadata_general_date":"Bild tagen","metadata_camera":"Kamera","metadata_camera_make":"M\xe4rke","metadata_camera_model":"Modell","metadata_camera_type":"Typ","metadata_camera_resolution":"Uppl\xf6sning","metadata_location":"Plats","metadata_location_longitude":"Longitud","metadata_location_latitude":"Latitud","metadata_location_orientation":"Kamerariktning","metadata_location_precision":"Positionsprecision","metadata_quality":"Kvalitetspo\xe4ng","metadata_quality_score":"Global po\xe4ng","metadata_quality_gps_score":"Positioneringspo\xe4ng","metadata_quality_resolution_score":"Uppl\xf6sningspo\xe4ng","metadata_quality_missing":"Inget v\xe4rde satt i bilden","metadata_exif":"EXIF / XMP","metadata_exif_name":"Tag","metadata_exif_value":"V\xe4rde","report":"Rapportera bild","search_user":"S\xf6k anv\xe4ndarnamn\u2026","legend_title":"Visa detaljer f\xf6r bild","report_auth":"Denna rapport kommer skickas genom ditt konto \\"{a}\\"","share_rss_title":"RSS feed av nya sekvensen f\xf6r karta i bild","error_josm":"JOSM svarar inte, k\xf6rs det och \xe4r remote p\xe5slaget?","sequence_prev":"F\xf6reg\xe5ende bild i sekvensen","josm_live":"Aktivera automatisk JOSM synkronisering vid inladdning av bild","metadata_general_picid_link":"G\xe5 till JSON beskrivning av bilden","metadata_quality_help":"L\xe4s mer om Kvalitetspo\xe4ng","error_pic":"Beg\xe4rd bild hittades inte","qualityscore_doc_3":"Det r\xe4knas ut baserat p\xe5 GPS precision och bildens uppl\xf6sning. Ett profesionellt system kommer ha A-kvalit\xe9, en 360\xb0 actionkamera kommer ha B-kvalit\xe9 och en telefon kommer ha C/D/E-kvalit\xe9.","qualityscore_doc_1":"Panoramax erbjuder en Kvalitetspo\xe4ng f\xf6r varje bild. Det m\xf6jlig\xf6r enkel kartfiltrering och en omfattande uppvisning av tillg\xe4nligheten av bilder av h\xf6g kvalitet.","metadata_camera_focal_length":"Br\xe4nnvidd","picture_flat":"Klassisk","map_background":"Kartbakgrund","map_background_aerial":"Sattelit","map_background_streets":"Gator","map_theme":"Karttema","map_theme_age":"Fotodatum","report_nature_label":"Typ av problem","report_nature":{"":"V\xe4lj typen av problem\u2026","blur_missing":"En persons ansikte eller en registreringspl\xe5t \xe4r synlig","blur_excess":"Ett objekt som inte beh\xf6ver suddas \xe4r suddad","inappropriate":"Bilden \xe4r ol\xe4mplig(orelaterat, nakenhet...)","privacy":"En privat v\xe4g eller fastighet \xe4r synlig","picture_low_quality":"Bilden \xe4r av mycket d\xe5lig kvalitet","mislocated":"Bilden \xe4r placerat d\xe5lig p\xe5 kartan","copyright":"Bilden inkr\xe4nker p\xe5 upphovsr\xe4tt","other":"N\xe5got annat typ av problem"},"report_whole_sequence":"Detta g\xe4ller hela sekvensen","report_details":"Ytterligare detaljer","report_details_placeholder":"Valfritt, kan du l\xe4gga till information om problemet och varf\xf6r det \xe4r ett problem","report_email":"Din e-post","report_email_placeholder":"Valfri","report_submit":"Skicka","report_wait":"Skickar rapport \u2026","report_success":"Rapporten har skickats. Det kommer att ses \xf6ver s\xe5 snart som m\xf6jligt.","report_failure":"Ett fel uppstod n\xe4r rapporten skapades: {e}. F\xf6rs\xf6k igen senare."},"maplibre":{"GeolocateControl.FindMyLocation":"Hitta min postion","GeolocateControl.LocationNotAvailable":"Plats inte tillg\xe4nlig"},"map":{"loading":"Laddar\u2026","thumbnail":"Miniatyrbild av r\xf6rd bild","not_public":"Inte offentligt synligt","slow_loading":"Kartan laddas l\xe5ngsamt och kan verka trasig"}}')},7304:ae=>{"use strict";ae.exports=JSON.parse('{"psv":{"twoFingers":"Gezinmek i\xe7in iki parma\u011f\u0131n\u0131z\u0131 kullan\u0131n","loadError":"Panorama y\xfcklenemedi","ctrlZoom":"G\xf6r\xfcnt\xfcy\xfc yak\u0131nla\u015ft\u0131rmak i\xe7in ctrl + kayd\u0131rma tu\u015flar\u0131n\u0131 kullan\u0131n"},"pnx":{"search_empty":"Sonu\xe7 bulunamad\u0131","zoom":"Yak\u0131nla\u015ft\u0131r","zoomIn":"Yak\u0131nla\u015ft\u0131r","expand":"Geni\u015flet","layers":"Katmanlar","search":"Ara","minimize_short":"Gizle","share_links":"Ba\u011flant\u0131lar","share_embed_docs":"G\xf6mme yap\u0131land\u0131rmas\u0131 hakk\u0131nda daha fazla bilgi edinin","share_print":"Yazd\u0131r","panoramax":"Panoramax","copied":"Kopyaland\u0131","error_click":"Devam et","sequence_pause":"Sekans duraklat","legend_title":"Resim detaylar\u0131n\u0131 g\xf6r\xfcnt\xfcle","contribute_id":"iD edit\xf6r ile OpenStreetMap\'e katk\u0131da bulunun","josm":"JOSM","loading_labels_serious":["\ud83d\uddfa\ufe0f Harita verisi y\xfckleniyor","\ud83d\udda5\ufe0f API sorgulan\u0131yor","\ud83d\uddbc\ufe0f K\xfc\xe7\xfck resimler y\xfckleniyor","\ud83d\udd0d EXIF meta verileri analiz ediliyor","\ud83c\udfd8\ufe0f 3D i\u015fleniyor","\ud83d\udcf7 360\xb0 resimler ba\u015flat\u0131l\u0131yor","\ud83d\udfe0 Renk dengeleme","\ud83d\udcaf Kalite Skoru Hesaplan\u0131yor \xa9","\ud83d\udce1 G\xfcncellemeler indiriliyor","\ud83c\udf0d Harita d\xf6\u015femeleri getiriliyor","\ud83d\udcf8 G\xf6lgeler i\u015fleniyor"],"metadata_general_license":"Lisans","metadata_general_picid":"Resim","metadata_general_seqid":"Sekans","metadata_general_seqid_link":"Sekans\u0131n JSON a\xe7\u0131klamas\u0131na git","metadata_camera_model":"Model","metadata_location":"Pozisyon","metadata_exif":"EXIF","metadata_exif_name":"Etiket","metadata_exif_value":"De\u011fer","semantics_title":"Etiketler","share_embed":"Web sitenize yerle\u015ftirin","sequence_speed":"Oynat\u0131c\u0131 h\u0131z\u0131","metadata_summary":"\xd6zet","metadata_general_license_link":"Lisans\u0131n tam a\xe7\u0131klamas\u0131n\u0131 g\xf6r\xfcn","metadata_quality":"Kalite","zoomOut":"Uzakla\u015ft\u0131r","share":"Payla\u015f","share_image":"HD Resim","copy":"Kopyala","error_retry":"L\xfctfen daha sonra tekrar deneyin","show_map":"Haritay\u0131 g\xf6r\xfcnt\xfcle","metadata":"Resim meta verisi","metadata_general_picid_link":"Resmin JSON a\xe7\u0131klamas\u0131na git","metadata_camera_type":"Tip","metadata_camera_resolution":"\xc7\xf6z\xfcn\xfcrl\xfck","metadata_quality_resolution_score":"\xc7\xf6z\xfcn\xfcrl\xfck skoru","metadata_camera":"Kamera","report_wait":"Rapor g\xf6nderiliyor\u2026","semantics_show_all_tags":"T\xfcm etiketleri g\xf6r\xfcnt\xfcle","semantics_hide_all_tags":"T\xfcm etiketleri gizle","semantics_value":"De\u011fer","semantics_delete_annotation":"\xd6zelli\u011fi sil","semantics_annotation_tooltip":"Detaylar\u0131 g\xf6r\xfcnt\xfclemek i\xe7in t\u0131klay\u0131n","semantics_tags_picture":"Resim etiketleri","semantics_delete_annotation_confirm":"Etiketi ger\xe7ekten silmek istiyor musunuz?","semantics_save":"De\u011fi\u015fiklikleri kaydet","minimize":"Bu widget\'\u0131 gizleyin, sol alt k\xf6\u015fedeki d\xfc\u011fmeyi kullanarak tekrar g\xf6sterebilirsiniz","moveUp":"Yukar\u0131 hareket et","moveDown":"A\u015fa\u011f\u0131 hareket et","moveLeft":"Sola hareket et","moveRight":"Sa\u011fa hareket et","moveMiddle":"Merkez g\xf6r\xfcn\xfcm","expand_info":"Widget\'\u0131n tam sayfada g\xf6r\xfcnmesini sa\u011fla","show_psv":"Resim g\xf6r\xfcnt\xfcleyiciyi g\xf6ster","options":"Se\xe7enekler","filters":"Filtreler","report_nature":{"picture_low_quality":"G\xf6r\xfcnt\xfc kalitesi d\xfc\u015f\xfck","other":"Ba\u015fka herhangi bir sorun","":"Sorunun niteli\u011fini se\xe7in\u2026","mislocated":"Resim haritada k\xf6t\xfc konumland\u0131r\u0131lm\u0131\u015f","copyright":"Resim telif hakk\u0131n\u0131 ihlal ediyor","blur_missing":"Bir ki\u015finin y\xfcz\xfc veya ara\xe7 plakas\u0131 g\xf6r\xfcn\xfcyor","blur_excess":"Bir nesneye gereksiz bir bulan\u0131kl\u0131k uyguland\u0131","inappropriate":"Resim uygunsuz (ilgisiz, \xe7\u0131plakl\u0131k\u2026)","privacy":"\xd6zel bir yol veya m\xfclk g\xf6r\xfcn\xfcyor"},"map_background_streets":"Sokaklar","contrast":"Daha y\xfcksek g\xf6r\xfcnt\xfc kontrast\u0131n\u0131 etkinle\u015ftirin","search_address":"Bir adres ya da \u015fehir aray\u0131n\u2026","search_user":"Bir kullan\u0131c\u0131 ad\u0131 aray\u0131n\u2026","share_page":"Resim ba\u011flant\u0131s\u0131","share_rss":"RSS beslemesi","share_rss_title":"\u015eu anda g\xf6r\xfcnen harita alan\u0131ndaki yeni sekanslar\u0131n RSS beslemesi","whats_panoramax":"Panoramax, b\xf6lgelerin resimlerinin co\u011frafi ortak alan\u0131d\u0131r.","error":"Bir sorunumuz var\u2026","sequence_next":"S\u0131radaki resim","sequence_play":"Bu sekans\u0131 izleyin","sequence_prev":"\xd6nceki resim","sequence_more":"Daha fazla oynatma se\xe7ene\u011fi","legend_license":"Lisans: {l}","id":"iD","geo_uri":"Harici uygulama","josm_live":"Resim y\xfcklenirken JOSM otomatik senkronizasyonunu etkinle\u015ftir","loading_labels_fun":["\ud83e\udd8c Geyik ge\xe7i\u015f i\u015faretlerini tespit etme","\ud83d\ude98 Panoramax Arac\u0131n\u0131 Bul \xa9","\u2615 Kafein enjekte ediliyor","\ud83d\ude00 G\xfcl\xfcmse, haritaland\u0131n!","\ud83d\udc08Kedi resimleri payla\u015f\u0131n","\ud83d\ude34 Ertelemeyi azalt","\ud83e\uded6 \xc7ay demle","\ud83d\udc27 Kaynak kodunu a\xe7","\ud83d\ude87 Yeralt\u0131 istasyonlar\u0131n\u0131n indeksleniyor","\ud83e\uddf9 Meta veri temizleme","\ud83d\ude92 \u0130tfaiye istasyonu resimleri g\xf6nderiliyor","\ud83d\udeb2Ye\u015fil yollar g\xfcncelleniyor","\ud83d\ude89 \u0130stasyon platformu turu","\ud83d\udef0\ufe0f Uydular Aran\u0131yor","\ud83d\udc65 Ki\u015filikler yaz\u0131l\u0131yor","\ud83d\udc1f Bal\u0131k ve patates k\u0131zartmas\u0131 d\xfckkanlar\u0131 bulunuyor","\ud83e\uddd1\u200d\ud83d\udcbb Hata ay\u0131klama aray\xfcz\xfc","\ud83d\udcc8 \u0130statistikler artt\u0131r\u0131l\u0131yor","\ud83e\udd16 Anlam bilimi \xf6\u011freniliyor","\ud83c\udfa8 Aray\xfcz yeniden tasarlan\u0131yor","\ud83d\udcc5 Foto\u011fraf haritalama partileri planla","\ud83e\uddc0 Olgunla\u015fan \xe7edarlar","\ud83c\udf04 Cornwall g\xfcne\u015f \u0131\u015f\u0131\u011f\u0131n\u0131n hesaplanmas\u0131","\ud83c\udf0a Y\xfcksek gelgitlerin \xf6l\xe7\xfcm\xfc"],"error_pic":"\u0130stenen resim bulunamad\u0131","error_nopic":"Belirtilen konumda resim mevcut de\u011fil","error_api":"Resim sunucusu kullan\u0131lam\u0131yor","error_webgl":"Taray\u0131c\u0131n\u0131z WebGL\'yi desteklemiyor","error_josm":"JOSM yan\u0131t vermiyor, \xe7al\u0131\u015f\u0131yor mu ve uzaktan eri\u015fim etkin mi?","error_api_compatibility":"Resim sunucusu bu g\xf6r\xfcnt\xfcleyici s\xfcr\xfcm\xfcyle uyumlu de\u011fil","filter_date":"Tarih","filter_date_1month":"1 ay","filter_date_6months":"6 ay","filter_date_1year":"1 y\u0131l","filter_user":"Kullan\u0131c\u0131","filter_user_mypics":"Resimlerim","filter_picture":"Resim tipi","filter_zoom_in":"Bu filtreyi g\xf6rmek i\xe7in haritay\u0131 yak\u0131nla\u015ft\u0131r\u0131n","picture_all":"T\xfcm\xfc","picture_flat":"Klasik","picture_360":"360\xb0","picture_flat_long":"Klasik resim","filter_qualityscore_help":"Etkinle\u015ftirmek veya devre d\u0131\u015f\u0131 b\u0131rakmak i\xe7in t\u0131klay\u0131n","qualityscore_title":"Kalite skoru hakk\u0131nda","qualityscore_doc_link":"Kalite Puan\u0131 hakk\u0131nda daha fazla bilgi edinin","map_background":"Harita arkaplan\u0131","map_theme":"Harita temas\u0131","map_theme_default":"Klasik","map_theme_age":"Yakalama tarihi","map_theme_age_1":"> 2 y\u0131l","map_theme_age_2":"< 2 y\u0131l","map_theme_age_4":"< 1 ay","map_theme_type":"Kamera tipi","map_theme_score":"Kalite skoru","metadata_general_copy_id":"ID Kopyala","metadata_general_copy_picid":"Resim ID kopyala","metadata_general_author":"Yazar","metadata_general_date":"Yakalama tarihi","metadata_general_instance":"K\xf6ken \xf6rne\u011fi","metadata_camera_focal_length":"Odak uzakl\u0131\u011f\u0131","metadata_location_orientation":"Y\xf6n","metadata_location_copy":"Kopyala {v}","metadata_location_precision":"Konumland\u0131rma hassasiyeti","metadata_quality_help":"Kalite Puan\u0131 hakk\u0131nda daha fazla bilgi edinin","metadata_quality_score":"K\xfcresel skor","metadata_quality_gps_score":"Pozisyon skoru","metadata_quality_missing":"resimde herhangi bir de\u011fer belirtilmemi\u015f","metadata_exif_doc":"D\xf6k\xfcman\u0131n EXIF etiketleri","semantics_tags":"{nb} etiketler","semantics_features":"Resim \xf6zellikleri","semantics_features_none":"Bu resimde hen\xfcz hi\xe7bir \xf6zellik \xe7izilmedi.","semantics_features_default_title":"Etiket {nb}","semantics_value_doc":"Bu etiket hakk\u0131nda daha fazla bilgi edinin","semantics_features_subtitle":"{nb} ili\u015fkili \xf6zellikler","semantics_key":"Anahtar","semantics_key_doc":"Bu anahtar hakk\u0131nda daha fazla bilgi edinin","semantics_qualifiers":"Niteleyiciler","semantics_draw_annotation":"Resmin \xfczerine eklemek istedi\u011finiz nesneyi \xe7izebilirsiniz (Opsiyonel).","semantics_login_needed":"Resim etiketlerini veya \xf6zelliklerini d\xfczenlemek i\xe7in Panoramax {n} \xf6rne\u011finde oturum a\xe7man\u0131z gerekir. Oturum a\xe7mak istiyor musunuz?","report_email_placeholder":"\u0130ste\u011fe ba\u011fl\u0131","semantics_add_annotation":"Yeni bir etiket ekle","semantics_erase_annotation":"\xc7izilmi\u015f \xf6zelli\u011fi sil","semantics_doc":"Yard\u0131m","semantics_doc_title":"Etiketler hakk\u0131nda","semantics_show_annotations":"Resim \xf6zelliklerini g\xf6r\xfcnt\xfcle","semantics_hide_annotations":"Resim \xf6zelliklerini gizle","semantics_zero_annotations":"Bu resimde hi\xe7bir \xf6zellik \xe7izilmedi","report":"Rapor et","report_auth":"Bu rapor \\"{a}\\" hesab\u0131n\u0131z kullan\u0131larak g\xf6nderilecektir","report_nature_label":"Sorunun nedeni","semantics_doc_info3":"Baz\u0131 nesneler yapay zeka ile otomatik olarak alg\u0131lan\u0131yor: kalite garanti edilmiyor.","semantics_doc_link":"Etiketler hakk\u0131nda daha fazla bilgi edinin","report_whole_sequence":"Bu t\xfcm sekans\u0131 ilgilendiriyor","report_details":"Ek ayr\u0131nt\u0131lar","report_details_placeholder":"\u0130ste\u011fe ba\u011fl\u0131 olarak sorunla ilgili ayr\u0131nt\u0131lar\u0131 ekleyebilirsiniz","report_email":"Eposta adresin","metadata_exif_doc_title":"EXIF ve XMP etiket tan\u0131mlar\u0131 hakk\u0131nda tam ayr\u0131nt\u0131lar i\xe7in Exiv2 belgelerine gidin","report_failure":"{e} raporu olu\u015fturulurken bir hata olu\u015ftu. L\xfctfen daha sonra tekrar deneyin.","error_psv":"Foto\u011fraf K\xfcresi G\xf6r\xfcnt\xfcleyicisi d\xfczg\xfcn y\xfcklenmiyor","picture_360_long":"Panoramic resim","report_success":"Rapor ba\u015far\u0131yla g\xf6nderildi. En k\u0131sa s\xfcrede incelenecektir.","filter_qualityscore":"Kalite skoru","map_theme_age_3":"< 1 y\u0131l","metadata_location_coordinates":"Koordinatlar (boylam, enlen)","semantics_doc_info2":"Resimdeki nesneleri de \xe7izebilirsiniz: yol i\u015faretleri, \u015fehir ekipmanlar\u0131... G\xf6rd\xfcklerinizi mevcut etiketleri kullanarak i\u015faretleyin. Gerekirse kendi etiketlerinizi de olu\u015fturabilirsiniz.","map_background_aerial":"Havadan","qualityscore_doc_3":"GPS hassasiyeti ve g\xf6r\xfcnt\xfc \xe7\xf6z\xfcn\xfcrl\xfc\u011f\xfcne g\xf6re hesaplan\u0131r. Profesyonel bir sistem A, 360\xb0 aksiyon kameras\u0131 B ve ak\u0131ll\u0131 telefon C/D/E derecelendirmesine sahip olacakt\u0131r.","metadata_location_copy_more":"Daha fazla koordinat kopyalama se\xe7ene\u011fi","report_submit":"G\xf6nder","qualityscore_doc_2":"Not, kullan\u0131c\u0131lara A/B/C/D/E puan\u0131 (A en iyi, E en k\xf6t\xfc) \u015feklinde g\xf6sterilir ve bu \xf6l\xe7ek \xfczerinden grafiksel olarak g\xf6sterilir:","semantics_doc_info1":"Etiketler kullanarak bir foto\u011fraf\u0131n ba\u011flam\u0131n\u0131 olu\u015fturun. transport=car etiketini kullanarak foto\u011fraf\u0131 araba ile \xe7ekilmi\u015f olarak etiketleyebilirsiniz.","qualityscore_doc_1":"Panoramax, her foto\u011fraf i\xe7in bir Kalite Puan\u0131 sunar. Kolay harita filtrelemesi ve y\xfcksek kaliteli foto\u011fraflar\u0131n kapsaml\u0131 bir \u015fekilde g\xf6r\xfcnt\xfclenmesini sa\u011flar.","metadata_camera_make":"Olu\u015ftur","semantics_wikidata_properties":{"P31":"\xf6rne\u011fi","P279":"alt s\u0131n\u0131f\u0131","P361":"par\xe7as\u0131"},"semantics_editor_error":"S\xf6zdizimi ge\xe7ersiz. Etiketleriniz \u015f\xf6yle g\xf6r\xfcnebilir:\\nkey=value\\nprefix|key=value\\nprefix|key[qualif_key=qualif_val]=value\\n\\nMaksimum anahtar uzunlu\u011fu 256 karakter, maksimum de\u011fer uzunlu\u011fu 2048 karakterdir.","semantics_send_fail":"De\u011fi\u015fiklikleriniz kaydedilemedi, l\xfctfen daha sonra tekrar deneyin","semantics_editor_example":"key=value\\nprefix|key=value","semantics_edit":"Nitelikleri d\xfczenle","semantics_undo":"D\xfczenlemelerinizi iptal edin","semantics_sequence_tags":"Sekans etiketi","semantics_picture_tags":"Resim etiketi","semantics_annotation_tags":"Nesne etiketi","filter_gps_precision_lessthan":"{n} metreden az","filter_gps_precision_morethan":"{n} metreden fazla","filter_gps_precision":"Konum hassasiyeti","filter_gps_precision_between":"{n1} ile {n2} metre aras\u0131nda","map_theme_gps":"Konum hassasiyeti"},"maplibre":{"GeolocateControl.FindMyLocation":"Konumu bul","GeolocateControl.LocationNotAvailable":"Lokasyon mevcut de\u011fil"},"map":{"thumbnail":"\xdczerine gelinen k\xfc\xe7\xfck resim","not_public":"Kamuya a\xe7\u0131k de\u011fil","slow_loading":"Haritan\u0131n y\xfcklenmesi yava\u015f ve bozuk g\xf6r\xfcnebilir","map_data":"{m} temelli harita","loading":"Y\xfckleniyor\u2026","more_panoramax":"Panoramax hakk\u0131nda daha fazla bilgi edinin"}}')},8230:ae=>{"use strict";ae.exports=JSON.parse('{"psv":{"twoFingers":"\u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0439\u0442\u0435 \u0434\u0432\u0430 \u043f\u0430\u043b\u044c\u0446\u0456 \u0434\u043b\u044f \u043d\u0430\u0432\u0456\u0433\u0430\u0446\u0456\u0457","ctrlZoom":"\u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0439\u0442\u0435 \u043a\u043e\u043c\u0431\u0456\u043d\u0430\u0446\u0456\u044e \u043a\u043b\u0430\u0432\u0456\u0448 Ctrl + \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0430, \u0449\u043e\u0431 \u0437\u0431\u0456\u043b\u044c\u0448\u0438\u0442\u0438 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","loadError":"\u041f\u0430\u043d\u043e\u0440\u0430\u043c\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435 \u0431\u0443\u0442\u0438 \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u0430"},"maplibre":{"GeolocateControl.FindMyLocation":"\u0417\u043d\u0430\u0439\u0442\u0438 \u043c\u043e\u0454 \u043c\u0456\u0441\u0446\u0435\u0437\u043d\u0430\u0445\u043e\u0434\u0436\u0435\u043d\u043d\u044f","GeolocateControl.LocationNotAvailable":"\u041c\u0456\u0441\u0446\u0435\u0437\u043d\u0430\u0445\u043e\u0434\u0436\u0435\u043d\u043d\u044f \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0435"},"pnx":{"zoomOut":"\u0417\u043c\u0435\u043d\u0448\u0438\u0442\u0438","zoom":"\u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0443\u0432\u0430\u043d\u043d\u044f","zoomIn":"\u0417\u0431\u0456\u043b\u044c\u0448\u0438\u0442\u0438","moveDown":"\u041f\u0435\u0440\u0435\u043c\u0456\u0441\u0442\u0438\u0442\u0438 \u0432\u043d\u0438\u0437","moveLeft":"\u0420\u0443\u0445\u0430\u0442\u0438\u0441\u044f \u043b\u0456\u0432\u043e\u0440\u0443\u0447","moveUp":"\u041f\u0435\u0440\u0435\u043c\u0456\u0441\u0442\u0438\u0442\u0438 \u0432\u0433\u043e\u0440\u0443","moveMiddle":"\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u0438\u0439 \u0432\u0438\u0434","moveRight":"\u041f\u0435\u0440\u0435\u043c\u0456\u0441\u0442\u0438\u0442\u0438\u0441\u044f \u0432\u043f\u0440\u0430\u0432\u043e","expand":"\u0420\u043e\u0437\u0433\u043e\u0440\u043d\u0443\u0442\u0438","show_psv":"\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u0434\u0430\u0447 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c","show_map":"\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u043a\u0430\u0440\u0442\u0443","minimize":"\u0421\u0445\u043e\u0432\u0430\u0442\u0438 \u0446\u0435\u0439 \u0432\u0456\u0434\u0436\u0435\u0442, \u0432\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u0439\u043e\u0433\u043e \u0437\u043d\u043e\u0432\u0443 \u0437\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u043e\u044e \u043a\u043d\u043e\u043f\u043a\u0438 \u0432 \u043d\u0438\u0436\u043d\u044c\u043e\u043c\u0443 \u043b\u0456\u0432\u043e\u043c\u0443 \u043a\u0443\u0442\u0456","minimize_short":"\u041f\u0440\u0438\u0445\u043e\u0432\u0430\u0442\u0438","options":"\u041e\u043f\u0446\u0456\u0457","filters":"\u0424\u0456\u043b\u044c\u0442\u0440\u0438","layers":"\u0428\u0430\u0440\u0438","search":"\u041f\u043e\u0448\u0443\u043a","search_empty":"\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0438 \u043d\u0435 \u0437\u043d\u0430\u0439\u0434\u0435\u043d\u0456","search_user":"\u041f\u043e\u0448\u0443\u043a \u0456\u043c\u0435\u043d\u0456 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u2026","share_links":"\u041b\u0456\u043d\u043a\u0438","share_image":"HD-\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","share_rss":"RSS-\u043a\u0430\u043d\u0430\u043b","share_embed":"\u0412\u0431\u0443\u0434\u0443\u0432\u0430\u0442\u0438 \u043d\u0430 \u0441\u0432\u0456\u0439 \u0432\u0435\u0431-\u0441\u0430\u0439\u0442","share_embed_docs":"\u0414\u0456\u0437\u043d\u0430\u0439\u0442\u0435\u0441\u044f \u0431\u0456\u043b\u044c\u0448\u0435 \u043f\u0440\u043e \u043a\u043e\u043d\u0444\u0456\u0433\u0443\u0440\u0430\u0446\u0456\u044e \u0432\u0431\u0443\u0434\u043e\u0432\u0443\u0432\u0430\u043d\u043d\u044f","share_print":"\u0414\u0440\u0443\u043a","panoramax":"Panoramax","copy":"\u041a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438","copied":"\u0421\u043a\u043e\u043f\u0456\u0439\u043e\u0432\u0430\u043d\u043e","error":"\u0423 \u043d\u0430\u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u2026","error_click":"\u041f\u0440\u043e\u0434\u043e\u0432\u0436\u0438\u0442\u0438","error_retry":"\u0411\u0443\u0434\u044c \u043b\u0430\u0441\u043a\u0430, \u0441\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u043f\u0456\u0437\u043d\u0456\u0448\u0435","sequence_play":"\u0412\u0456\u0434\u0442\u0432\u043e\u0440\u0456\u0442\u044c \u0446\u044e \u043f\u043e\u0441\u043b\u0456\u0434\u043e\u0432\u043d\u0456\u0441\u0442\u044c","sequence_pause":"\u041f\u043e\u0441\u043b\u0456\u0434\u043e\u0432\u043d\u0456\u0441\u0442\u044c \u043f\u0430\u0443\u0437","sequence_prev":"\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u0454 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u0432 \u043f\u043e\u0441\u043b\u0456\u0434\u043e\u0432\u043d\u043e\u0441\u0442\u0456","sequence_more":"\u0411\u0456\u043b\u044c\u0448\u0435 \u0432\u0430\u0440\u0456\u0430\u043d\u0442\u0456\u0432 \u0433\u0440\u0438","legend_license":"\u041b\u0456\u0446\u0435\u043d\u0437\u0456\u044f: {l}","legend_title":"\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u0434\u0435\u0442\u0430\u043b\u0456 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","id":"iD","geo_uri":"\u0417\u043e\u0432\u043d\u0456\u0448\u043d\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0430","josm":"JOSM","loading_labels_serious":["\ud83d\uddfa\ufe0f \u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f \u0434\u0430\u043d\u0438\u0445 \u043a\u0430\u0440\u0442\u0438","\ud83d\udda5\ufe0f \u0417\u0430\u043f\u0438\u0442 API","\ud83d\uddbc\ufe0f \u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f \u043c\u0456\u043d\u0456\u0430\u0442\u044e\u0440","\ud83d\udd0d \u0410\u043d\u0430\u043b\u0456\u0437 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u0438\u0445 EXIF","\ud83c\udfd8\ufe0f 3D-\u0432\u0456\u0437\u0443\u0430\u043b\u0456\u0437\u0430\u0446\u0456\u044f","\ud83d\udcf7 \u0406\u043d\u0456\u0446\u0456\u0430\u043b\u0456\u0437\u0430\u0446\u0456\u044f 360\xb0-\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c","\ud83d\udfe0 \u0411\u0430\u043b\u0430\u043d\u0441\u0443\u0432\u0430\u043d\u043d\u044f \u043a\u043e\u043b\u044c\u043e\u0440\u0456\u0432","\ud83d\udcaf \u041e\u0431\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044f \u043f\u043e\u043a\u0430\u0437\u043d\u0438\u043a\u0430 \u044f\u043a\u043e\u0441\u0442\u0456 \xa9","\ud83d\udce1 \u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f \u043e\u043d\u043e\u0432\u043b\u0435\u043d\u044c","\ud83c\udf0d \u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0456\u0432 \u043a\u0430\u0440\u0442\u0438","\ud83d\udcf8 \u041e\u0431\u0440\u043e\u0431\u043a\u0430 \u0442\u0456\u043d\u0435\u0439"],"expand_info":"\u0417\u0440\u043e\u0431\u0438\u0442\u0438 \u0432\u0456\u0434\u0436\u0435\u0442 \u0432\u0438\u0434\u0438\u043c\u0438\u043c \u043d\u0430 \u0432\u0441\u0456\u0439 \u0441\u0442\u043e\u0440\u0456\u043d\u0446\u0456","search_address":"\u041f\u043e\u0448\u0443\u043a \u0437\u0430 \u0430\u0434\u0440\u0435\u0441\u043e\u044e, \u043c\u0456\u0441\u0442\u043e\u043c\u2026","sequence_speed":"\u0428\u0432\u0438\u0434\u043a\u0456\u0441\u0442\u044c \u0433\u0440\u0430\u0432\u0446\u044f","share_rss_title":"RSS-\u043a\u0430\u043d\u0430\u043b \u043d\u043e\u0432\u0438\u0445 \u043f\u043e\u0441\u043b\u0456\u0434\u043e\u0432\u043d\u043e\u0441\u0442\u0435\u0439 \u0443 \u043f\u043e\u0442\u043e\u0447\u043d\u0456\u0439 \u0432\u0438\u0434\u0438\u043c\u0456\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0456 \u043a\u0430\u0440\u0442\u0438","whats_panoramax":"Panoramax \u2014 \u0446\u0435 \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0456\u0447\u043d\u0430 \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u0438\u0445 \u0434\u043b\u044f \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c \u0442\u0435\u0440\u0438\u0442\u043e\u0440\u0456\u0439.","share":"\u041f\u043e\u0434\u0456\u043b\u0438\u0442\u0438\u0441\u044f","share_page":"\u041f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u043d\u0430 \u0446\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443","sequence_next":"\u041d\u0430\u0441\u0442\u0443\u043f\u043d\u0435 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u0432 \u043f\u043e\u0441\u043b\u0456\u0434\u043e\u0432\u043d\u043e\u0441\u0442\u0456","contribute_id":"\u0414\u043e\u043b\u0443\u0447\u0456\u0442\u044c\u0441\u044f \u0434\u043e OpenStreetMap \u0437\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u043e\u044e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 iD","josm_live":"\u0423\u0432\u0456\u043c\u043a\u043d\u0443\u0442\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u0443 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0456\u0437\u0430\u0446\u0456\u044e JOSM \u043f\u0456\u0434 \u0447\u0430\u0441 \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c","loading_labels_fun":["\ud83e\udd8c \u0412\u0438\u044f\u0432\u043b\u0435\u043d\u043d\u044f \u0437\u043d\u0430\u043a\u0456\u0432 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0443 \u0434\u043b\u044f \u043e\u043b\u0435\u043d\u0456\u0432","\ud83d\ude98 \u041f\u043e\u0448\u0443\u043a \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0456\u043b\u044f Panoramax \xa9","\u2615 \u0406\u043d\'\u0454\u043a\u0446\u0456\u0457 \u043a\u043e\u0444\u0435\u0457\u043d\u0443","\ud83d\ude00 \u041f\u043e\u0441\u043c\u0456\u0445\u043d\u0438\u0441\u044f, \u0442\u0438 \u043d\u0430 \u043a\u0430\u0440\u0442\u0456!","\ud83d\udc08 \u0414\u0456\u043b\u044e\u0441\u044f \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0456\u044f\u043c\u0438 \u043a\u043e\u0442\u0456\u0432","\ud83d\ude34 \u0417\u043c\u0435\u043d\u0448\u0435\u043d\u043d\u044f \u043f\u0440\u043e\u043a\u0440\u0430\u0441\u0442\u0438\u043d\u0430\u0446\u0456\u0457","\ud83e\uded6 \u0417\u0430\u0432\u0430\u0440\u044e\u0432\u0430\u043d\u043d\u044f \u0447\u0430\u044e","\ud83d\udc27 \u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0442\u044f \u0432\u0438\u0445\u0456\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0443","\ud83d\ude87 \u0406\u043d\u0434\u0435\u043a\u0441\u0443\u0432\u0430\u043d\u043d\u044f \u0441\u0442\u0430\u043d\u0446\u0456\u0439 \u043c\u0435\u0442\u0440\u043e","\ud83e\uddf9 \u041e\u0447\u0438\u0449\u0435\u043d\u043d\u044f \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u0438\u0445","\ud83d\ude92 \u041d\u0430\u0434\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0456\u0439 \u043f\u043e\u0436\u0435\u0436\u043d\u043e\u0457 \u0441\u0442\u0430\u043d\u0446\u0456\u0457","\ud83d\udeb2 \u041e\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044f \u0437\u0435\u043b\u0435\u043d\u0438\u0445 \u0441\u0442\u0435\u0436\u043e\u043a","\ud83d\ude89 \u041e\u0433\u043b\u044f\u0434 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0438 \u0441\u0442\u0430\u043d\u0446\u0456\u0457","\ud83d\udef0\ufe0f \u041f\u043e\u0448\u0443\u043a \u0441\u0443\u043f\u0443\u0442\u043d\u0438\u043a\u0456\u0432","\ud83d\udc65 \u041f\u0438\u0441\u044c\u043c\u0435\u043d\u043d\u0438\u0446\u044c\u043a\u0456 \u043f\u0435\u0440\u0441\u043e\u043d\u0438","\ud83d\udc1f \u041f\u043e\u0448\u0443\u043a \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0456\u0432 \u0447\u0456\u043f\u0441\u0456\u0432","\ud83e\uddd1\u200d\ud83d\udcbb \u0406\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043d\u0430\u043b\u0430\u0433\u043e\u0434\u0436\u0435\u043d\u043d\u044f","\ud83d\udcc8 \u0417\u0431\u0456\u043b\u044c\u0448\u0435\u043d\u043d\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438","\ud83e\udd16 \u0412\u0438\u0432\u0447\u0435\u043d\u043d\u044f \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0438","\ud83c\udfa8 \u0420\u0435\u0434\u0438\u0437\u0430\u0439\u043d \u0456\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443","\ud83d\udcc5 \u041f\u043b\u0430\u043d\u0443\u0432\u0430\u043d\u043d\u044f \u0432\u0435\u0447\u0456\u0440\u043e\u043a \u0437 \u0444\u043e\u0442\u043e\u043c\u0435\u043f\u0456\u043d\u0433\u043e\u043c","\ud83e\uddc0 \u0412\u0438\u0437\u0440\u0456\u043b\u0438\u0439 \u0447\u0435\u0434\u0434\u0435\u0440","\ud83c\udf04 \u0420\u043e\u0437\u0440\u0430\u0445\u0443\u043d\u043e\u043a \u043a\u043e\u0440\u043d\u0443\u043e\u043b\u044c\u0441\u044c\u043a\u043e\u0457 \u0441\u043e\u043d\u044f\u0447\u043d\u043e\u0457 \u0435\u043d\u0435\u0440\u0433\u0456\u0457","\ud83c\udf0a \u0412\u0438\u043c\u0456\u0440\u044e\u0432\u0430\u043d\u043d\u044f \u043f\u0440\u0438\u043f\u043b\u0438\u0432\u0456\u0432"],"error_psv":"\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u0430 \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u0434\u0443 \u0444\u043e\u0442\u043e\u0441\u0444\u0435\u0440 \u043d\u0435 \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0443\u0454\u0442\u044c\u0441\u044f \u043d\u0430\u043b\u0435\u0436\u043d\u0438\u043c \u0447\u0438\u043d\u043e\u043c","error_pic":"\u0417\u0430\u043f\u0438\u0442\u0430\u043d\u0435 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u043d\u0435 \u0437\u043d\u0430\u0439\u0434\u0435\u043d\u043e","error_nopic":"\u0423 \u0432\u043a\u0430\u0437\u0430\u043d\u043e\u043c\u0443 \u043c\u0456\u0441\u0446\u0456 \u043d\u0435\u043c\u0430\u0454 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","error_api":"\u0421\u0435\u0440\u0432\u0435\u0440 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0438\u0439","error_webgl":"\u0412\u0430\u0448 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043d\u0435 \u043f\u0456\u0434\u0442\u0440\u0438\u043c\u0443\u0454 WebGL","error_josm":"JOSM \u043d\u0435 \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u0430\u0454, \u0447\u0438 \u043f\u0440\u0430\u0446\u044e\u0454 \u0432\u0456\u043d \u0456 \u0447\u0438 \u0443\u0432\u0456\u043c\u043a\u043d\u0435\u043d\u043e \u0432\u0456\u0434\u0434\u0430\u043b\u0435\u043d\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f?","error_api_compatibility":"\u0421\u0435\u0440\u0432\u0435\u0440 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c \u043d\u0435 \u0441\u0443\u043c\u0456\u0441\u043d\u0438\u0439 \u0437 \u0446\u0456\u0454\u044e \u0432\u0435\u0440\u0441\u0456\u0454\u044e \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u0434\u0430\u0447\u0430","filter_date":"\u0414\u0430\u0442\u0430","filter_date_1month":"1 \u043c\u0456\u0441\u044f\u0446\u044c","filter_date_6months":"6 \u043c\u0456\u0441\u044f\u0446\u0456\u0432","filter_date_1year":"1 \u0440\u0456\u043a","filter_user":"\u041a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447","filter_user_mypics":"\u041c\u043e\u0457 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0456\u0457","filter_picture":"\u0422\u0438\u043f \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","filter_zoom_in":"\u0417\u0431\u0456\u043b\u044c\u0448\u0442\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431 \u043a\u0430\u0440\u0442\u0438, \u0449\u043e\u0431 \u043f\u043e\u0431\u0430\u0447\u0438\u0442\u0438 \u0446\u0435\u0439 \u0444\u0456\u043b\u044c\u0442\u0440","picture_all":"\u0423\u0441\u0456","picture_flat":"\u041a\u043b\u0430\u0441\u0438\u0447\u043d\u0438\u0439","picture_360":"360\xb0","picture_flat_long":"\u041a\u043b\u0430\u0441\u0438\u0447\u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u0430","picture_360_long":"\u041f\u0430\u043d\u043e\u0440\u0430\u043c\u043d\u0435 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","filter_qualityscore":"\u041f\u043e\u043a\u0430\u0437\u043d\u0438\u043a \u044f\u043a\u043e\u0441\u0442\u0456","filter_qualityscore_help":"\u041d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c, \u0449\u043e\u0431 \u0443\u0432\u0456\u043c\u043a\u043d\u0443\u0442\u0438 \u0430\u0431\u043e \u0432\u0438\u043c\u043a\u043d\u0443\u0442\u0438","qualityscore_title":"\u041f\u0440\u043e \u043f\u043e\u043a\u0430\u0437\u043d\u0438\u043a \u044f\u043a\u043e\u0441\u0442\u0456","qualityscore_doc_1":"Panoramax \u043f\u0440\u043e\u043f\u043e\u043d\u0443\u0454 \u043e\u0446\u0456\u043d\u043a\u0443 \u044f\u043a\u043e\u0441\u0442\u0456 \u0434\u043b\u044f \u043a\u043e\u0436\u043d\u043e\u0433\u043e \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f. \u0426\u0435 \u0434\u043e\u0437\u0432\u043e\u043b\u044f\u0454 \u043b\u0435\u0433\u043a\u043e \u0444\u0456\u043b\u044c\u0442\u0440\u0443\u0432\u0430\u0442\u0438 \u043a\u0430\u0440\u0442\u0438 \u0442\u0430 \u043f\u043e\u0432\u043d\u0435 \u0432\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0438\u0445 \u0432\u0438\u0441\u043e\u043a\u043e\u044f\u043a\u0456\u0441\u043d\u0438\u0445 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c.","qualityscore_doc_2":"\u041e\u0446\u0456\u043d\u043a\u0430 \u0432\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0430\u0454\u0442\u044c\u0441\u044f \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u043c \u0443 \u0432\u0438\u0433\u043b\u044f\u0434\u0456 \u0431\u0430\u043b\u0456\u0432 A/B/C/D/E (A \u2013 \u043d\u0430\u0439\u043a\u0440\u0430\u0449\u0438\u0439, E \u2013 \u043d\u0430\u0439\u0433\u0456\u0440\u0448\u0438\u0439) \u0442\u0430 \u0432\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0430\u0454\u0442\u044c\u0441\u044f \u0433\u0440\u0430\u0444\u0456\u0447\u043d\u043e \u0437\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u043e\u044e \u0446\u0456\u0454\u0457 \u0448\u043a\u0430\u043b\u0438:","qualityscore_doc_3":"\u0412\u0456\u043d \u0440\u043e\u0437\u0440\u0430\u0445\u043e\u0432\u0443\u0454\u0442\u044c\u0441\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0456 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0456 GPS \u0442\u0430 \u0440\u043e\u0437\u0434\u0456\u043b\u044c\u043d\u043e\u0457 \u0437\u0434\u0430\u0442\u043d\u043e\u0441\u0442\u0456 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f. \u041f\u0440\u043e\u0444\u0435\u0441\u0456\u0439\u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043c\u0430\u0442\u0438\u043c\u0435 \u0440\u0435\u0439\u0442\u0438\u043d\u0433 A, \u0435\u043a\u0448\u043d-\u043a\u0430\u043c\u0435\u0440\u0430 \u043d\u0430 360\xb0 \u2014 \u0440\u0435\u0439\u0442\u0438\u043d\u0433 B, \u0430 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d \u2014 \u0440\u0435\u0439\u0442\u0438\u043d\u0433 C/D/E.","qualityscore_doc_link":"\u0414\u0456\u0437\u043d\u0430\u0439\u0442\u0435\u0441\u044f \u0431\u0456\u043b\u044c\u0448\u0435 \u043f\u0440\u043e \u043f\u043e\u043a\u0430\u0437\u043d\u0438\u043a \u044f\u043a\u043e\u0441\u0442\u0456","map_background":"\u0424\u043e\u043d \u043a\u0430\u0440\u0442\u0438","map_background_aerial":"\u041f\u043e\u0432\u0456\u0442\u0440\u044f\u043d\u0438\u0439","map_background_streets":"\u0412\u0443\u043b\u0438\u0446\u0456","map_theme":"\u0422\u0435\u043c\u0430 \u043a\u0430\u0440\u0442\u0438","map_theme_default":"\u041a\u043b\u0430\u0441\u0438\u0447\u043d\u0438\u0439","map_theme_age":"\u0414\u0430\u0442\u0430 \u0437\u0439\u043e\u043c\u043a\u0438","map_theme_age_1":"> 2 \u0440\u043e\u043a\u0456\u0432","map_theme_age_2":"< 2 \u0440\u043e\u043a\u0456\u0432","map_theme_age_3":"< 1 \u0440\u043e\u043a\u0443","map_theme_age_4":"< 1 \u043c\u0456\u0441\u044f\u0446\u044f","map_theme_type":"\u0422\u0438\u043f \u043a\u0430\u043c\u0435\u0440\u0438","map_theme_score":"\u041f\u043e\u043a\u0430\u0437\u043d\u0438\u043a \u044f\u043a\u043e\u0441\u0442\u0456","contrast":"\u0423\u0432\u0456\u043c\u043a\u043d\u0443\u0442\u0438 \u0432\u0438\u0449\u0443 \u043a\u043e\u043d\u0442\u0440\u0430\u0441\u0442\u043d\u0456\u0441\u0442\u044c \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","metadata":"\u041c\u0435\u0442\u0430\u0434\u0430\u043d\u0456 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","metadata_summary":"\u041a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u0437\u043c\u0456\u0441\u0442","metadata_general_copy_id":"\u041a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438 \u0456\u0434\u0435\u043d\u0442\u0438\u0444\u0456\u043a\u0430\u0442\u043e\u0440","metadata_general_picid":"\u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","metadata_general_seqid":"\u041f\u043e\u0441\u043b\u0456\u0434\u043e\u0432\u043d\u0456\u0441\u0442\u044c","metadata_general_copy_picid":"\u041a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438 \u0456\u0434\u0435\u043d\u0442\u0438\u0444\u0456\u043a\u0430\u0442\u043e\u0440 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","metadata_general_picid_link":"\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u0434\u043e JSON-\u043e\u043f\u0438\u0441\u0443 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","metadata_general_seqid_link":"\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u0434\u043e JSON-\u043e\u043f\u0438\u0441\u0443 \u043f\u043e\u0441\u043b\u0456\u0434\u043e\u0432\u043d\u043e\u0441\u0442\u0456","metadata_general_author":"\u0410\u0432\u0442\u043e\u0440","metadata_general_license":"\u041b\u0456\u0446\u0435\u043d\u0437\u0456\u044f","metadata_general_license_link":"\u0414\u0438\u0432. \u043f\u043e\u0432\u043d\u0438\u0439 \u043e\u043f\u0438\u0441 \u043b\u0456\u0446\u0435\u043d\u0437\u0456\u0457","metadata_general_date":"\u0414\u0430\u0442\u0430 \u0437\u0439\u043e\u043c\u043a\u0438","metadata_camera":"\u041a\u0430\u043c\u0435\u0440\u0430","metadata_camera_make":"\u0417\u0440\u043e\u0431\u0438\u0442\u0438","metadata_general_instance":"\u041f\u043e\u0447\u0430\u0442\u043a\u043e\u0432\u0438\u0439 \u0435\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440","metadata_camera_model":"\u041c\u043e\u0434\u0435\u043b\u044c","metadata_camera_type":"\u0422\u0438\u043f","metadata_camera_resolution":"\u0420\u043e\u0437\u0434\u0456\u043b\u044c\u043d\u0430 \u0437\u0434\u0430\u0442\u043d\u0456\u0441\u0442\u044c","metadata_location":"\u041f\u043e\u0437\u0438\u0446\u0456\u044f","metadata_location_coordinates":"\u041a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0438 (\u0434\u043e\u0432\u0433\u043e\u0442\u0430, \u0448\u0438\u0440\u043e\u0442\u0430)","metadata_location_orientation":"\u041d\u0430\u043f\u0440\u044f\u043c\u043e\u043a","metadata_location_precision":"\u0422\u043e\u0447\u043d\u0456\u0441\u0442\u044c \u043f\u043e\u0437\u0438\u0446\u0456\u043e\u043d\u0443\u0432\u0430\u043d\u043d\u044f","metadata_location_copy":"\u041a\u043e\u043f\u0456\u044f {v}","metadata_location_copy_more":"\u0411\u0456\u043b\u044c\u0448\u0435 \u043e\u043f\u0446\u0456\u0439 \u043a\u043e\u043f\u0456\u044e\u0432\u0430\u043d\u043d\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442","metadata_quality":"\u042f\u043a\u0456\u0441\u0442\u044c","metadata_quality_help":"\u0414\u0456\u0437\u043d\u0430\u0439\u0442\u0435\u0441\u044f \u0431\u0456\u043b\u044c\u0448\u0435 \u043f\u0440\u043e \u043f\u043e\u043a\u0430\u0437\u043d\u0438\u043a \u044f\u043a\u043e\u0441\u0442\u0456","metadata_quality_score":"\u0413\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0438\u0439 \u0431\u0430\u043b","metadata_quality_gps_score":"\u041e\u0446\u0456\u043d\u043a\u0430 \u043f\u043e\u0437\u0438\u0446\u0456\u043e\u043d\u0443\u0432\u0430\u043d\u043d\u044f","metadata_quality_resolution_score":"\u041e\u0446\u0456\u043d\u043a\u0430 \u0440\u043e\u0437\u0434\u0456\u043b\u044c\u043d\u043e\u0457 \u0437\u0434\u0430\u0442\u043d\u043e\u0441\u0442\u0456","metadata_exif":"EXIF","metadata_exif_name":"\u0422\u0435\u0433","metadata_exif_value":"\u0417\u043d\u0430\u0447\u0435\u043d\u043d\u044f","metadata_exif_doc":"\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0456\u044f \u0434\u043b\u044f \u0442\u0435\u0433\u0456\u0432 EXIF","metadata_exif_doc_title":"\u041f\u0435\u0440\u0435\u0439\u0434\u0456\u0442\u044c \u0434\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0456\u0457 Exiv2, \u0449\u043e\u0431 \u043e\u0442\u0440\u0438\u043c\u0430\u0442\u0438 \u043f\u043e\u0432\u043d\u0443 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044e \u043f\u0440\u043e \u0432\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f \u0442\u0435\u0433\u0456\u0432 EXIF \u0442\u0430 XMP","semantics_title":"\u0422\u0435\u0433\u0438","semantics_tags":"\u0442\u0435\u0433\u0438 {nb}","semantics_features_subtitle":"{nb} \u043f\u043e\u0432\'\u044f\u0437\u0430\u043d\u0456 \u0432\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456","semantics_annotation_tooltip":"\u041d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c, \u0449\u043e\u0431 \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u043d\u0443\u0442\u0438 \u0434\u0435\u0442\u0430\u043b\u0456","semantics_show_all_tags":"\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u0432\u0441\u0456 \u0442\u0435\u0433\u0438","semantics_hide_all_tags":"\u041f\u0440\u0438\u0445\u043e\u0432\u0430\u0442\u0438 \u0432\u0441\u0456 \u0442\u0435\u0433\u0438","semantics_key":"\u041a\u043b\u044e\u0447","semantics_value":"\u0417\u043d\u0430\u0447\u0435\u043d\u043d\u044f","semantics_key_doc":"\u0414\u0456\u0437\u043d\u0430\u0439\u0442\u0435\u0441\u044f \u0431\u0456\u043b\u044c\u0448\u0435 \u043f\u0440\u043e \u0446\u0435\u0439 \u043a\u043b\u044e\u0447","semantics_value_doc":"\u0414\u0456\u0437\u043d\u0430\u0439\u0442\u0435\u0441\u044f \u0431\u0456\u043b\u044c\u0448\u0435 \u043f\u0440\u043e \u0446\u0435\u0439 \u0442\u0435\u0433","semantics_tags_picture":"\u0422\u0435\u0433\u0438 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c","semantics_tags_picture_none":"\u0414\u043b\u044f \u0446\u044c\u043e\u0433\u043e \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u0449\u0435 \u043d\u0435 \u0432\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u0436\u043e\u0434\u043d\u0438\u0445 \u0442\u0435\u0433\u0456\u0432.","semantics_qualifiers":"\u041a\u0432\u0430\u043b\u0456\u0444\u0456\u043a\u0430\u0442\u043e\u0440\u0438","semantics_features":"\u041e\u0441\u043e\u0431\u043b\u0438\u0432\u043e\u0441\u0442\u0456 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","semantics_features_default_title":"\u0422\u0435\u0433 {nb}","semantics_features_none":"\u041d\u0430 \u0446\u044c\u043e\u043c\u0443 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u0456 \u0449\u0435 \u043d\u0435 \u043d\u0430\u043c\u0430\u043b\u044c\u043e\u0432\u0430\u043d\u043e \u0436\u043e\u0434\u043d\u043e\u0457 \u043e\u0441\u043e\u0431\u043b\u0438\u0432\u043e\u0441\u0442\u0456.","semantics_show_annotations":"\u0424\u0443\u043d\u043a\u0446\u0456\u0457 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u043d\u0430 \u0434\u0438\u0441\u043f\u043b\u0435\u0457","metadata_camera_focal_length":"\u0424\u043e\u043a\u0443\u0441\u043d\u0430 \u0432\u0456\u0434\u0441\u0442\u0430\u043d\u044c","metadata_quality_missing":"\u043d\u0430 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u0456 \u043d\u0435 \u0432\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f","semantics_draw_annotation":"\u0412\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u043c\u0430\u043b\u044e\u0432\u0430\u0442\u0438 \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u0438\u0439 \u043e\u0431\'\u0454\u043a\u0442 \u043f\u043e\u0432\u0435\u0440\u0445 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f (\u043d\u0435\u043e\u0431\u043e\u0432\'\u044f\u0437\u043a\u043e\u0432\u043e).","semantics_save_drawn_annotation":"\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438 \u043f\u043e\u0437\u0438\u0446\u0456\u044e","semantics_undo_drawn_annotation":"\u0421\u043a\u0430\u0441\u0443\u0432\u0430\u0442\u0438","semantics_delete_annotation":"\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0446\u0435\u0439 \u043e\u0431\'\u0454\u043a\u0442","semantics_hashtags":"\u0425\u0435\u0448\u0442\u0435\u0433\u0438 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c","semantics_wikidata_properties":{"P31":"\u043f\u0440\u0438\u043a\u043b\u0430\u0434","P279":"\u043f\u0456\u0434\u043a\u043b\u0430\u0441","P361":"\u0447\u0430\u0441\u0442\u0438\u043d\u0430"},"semantics_editor_error":"\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u043d\u0435\u0434\u0456\u0439\u0441\u043d\u0438\u0439. \u0412\u0430\u0448\u0456 \u0442\u0435\u0433\u0438 \u043c\u043e\u0436\u0443\u0442\u044c \u0432\u0438\u0433\u043b\u044f\u0434\u0430\u0442\u0438 \u0442\u0430\u043a:\\n\u043a\u043b\u044e\u0447=\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f\\n\u043f\u0440\u0435\u0444\u0456\u043a\u0441|\u043a\u043b\u044e\u0447=\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f\\n\u043f\u0440\u0435\u0444\u0456\u043a\u0441|\u043a\u043b\u044e\u0447[\u043a\u0432\u0430\u043b\u0456\u0444\u0456\u043a\u0430\u0446\u0456\u0439\u043d\u0438\u0439_\u043a\u043b\u044e\u0447=\u043a\u0432\u0430\u043b\u0456\u0444\u0456\u043a\u0430\u0446\u0456\u0439\u043d\u0435_\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f]=\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f\\n\\n\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430 \u0434\u043e\u0432\u0436\u0438\u043d\u0430 \u043a\u043b\u044e\u0447\u0430 \u2014 256 \u0441\u0438\u043c\u0432\u043e\u043b\u0456\u0432, \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430 \u0434\u043e\u0432\u0436\u0438\u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f \u2014 2048 \u0441\u0438\u043c\u0432\u043e\u043b\u0456\u0432.","semantics_editor_example":"\u043a\u043b\u044e\u0447=\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f\\n\u043f\u0440\u0435\u0444\u0456\u043a\u0441|\u043a\u043b\u044e\u0447=\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f","semantics_edit":"\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0438","semantics_save":"\u0417\u0431\u0435\u0440\u0435\u0436\u0456\u0442\u044c \u0437\u043c\u0456\u043d\u0438","semantics_undo":"\u0421\u043a\u0430\u0441\u0443\u0432\u0430\u0442\u0438 \u0432\u0430\u0448\u0456 \u0437\u043c\u0456\u043d\u0438","semantics_cantsave_invalid":"\u041d\u0435 \u0432\u0434\u0430\u043b\u043e\u0441\u044f \u0437\u0431\u0435\u0440\u0435\u0433\u0442\u0438 \u0437\u043c\u0456\u043d\u0438, \u0432\u0432\u0435\u0434\u0435\u043d\u0456 \u0434\u0430\u043d\u0456 \u043d\u0435\u0434\u0456\u0439\u0441\u043d\u0456","semantics_send_fail":"\u041d\u0435 \u0432\u0434\u0430\u043b\u043e\u0441\u044f \u0437\u0431\u0435\u0440\u0435\u0433\u0442\u0438 \u0437\u043c\u0456\u043d\u0438, \u0441\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u043f\u0456\u0437\u043d\u0456\u0448\u0435","semantics_send_ok":"\u0412\u0430\u0448\u0456 \u0437\u043c\u0456\u043d\u0438 \u0443\u0441\u043f\u0456\u0448\u043d\u043e \u043d\u0430\u0434\u0456\u0441\u043b\u0430\u043d\u043e","report_details":"\u0414\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u0456 \u0434\u0435\u0442\u0430\u043b\u0456","report_details_placeholder":"\u0417\u0430 \u0431\u0430\u0436\u0430\u043d\u043d\u044f\u043c, \u0432\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u043e\u0434\u0430\u0442\u0438 \u0434\u0435\u0442\u0430\u043b\u0456 \u043f\u0440\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443","semantics_zero_annotations":"\u041d\u0430 \u0446\u044c\u043e\u043c\u0443 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u0456 \u043d\u0435\u043c\u0430\u0454 \u043d\u0430\u043c\u0430\u043b\u044c\u043e\u0432\u0430\u043d\u0438\u0445 \u0440\u0438\u0441","semantics_add_annotation":"\u0414\u043e\u0434\u0430\u0442\u0438 \u043d\u043e\u0432\u0438\u0439 \u0442\u0435\u0433","semantics_delete_annotation_confirm":"\u0412\u0438 \u0441\u043f\u0440\u0430\u0432\u0434\u0456 \u0445\u043e\u0447\u0435\u0442\u0435 \u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0446\u0435\u0439 \u0442\u0435\u0433?","semantics_login_needed":"\u0429\u043e\u0431 \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u0442\u0435\u0433\u0438 \u0430\u0431\u043e \u043e\u0431\'\u0454\u043a\u0442\u0438 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c, \u0432\u0430\u043c \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u043e \u0443\u0432\u0456\u0439\u0442\u0438 \u0432 \u0435\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 Panoramax {n}. \u0412\u0438 \u0445\u043e\u0447\u0435\u0442\u0435 \u0443\u0432\u0456\u0439\u0442\u0438?","report":"\u0417\u0432\u0456\u0442","report_auth":"\u0426\u0435\u0439 \u0437\u0432\u0456\u0442 \u0431\u0443\u0434\u0435 \u043d\u0430\u0434\u0456\u0441\u043b\u0430\u043d\u043e \u0437 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u044f\u043c \u0432\u0430\u0448\u043e\u0433\u043e \u043e\u0431\u043b\u0456\u043a\u043e\u0432\u043e\u0433\u043e \u0437\u0430\u043f\u0438\u0441\u0443 \\"{a}\\"","report_nature_label":"\u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0438","report_nature":{"blur_excess":"\u0414\u043e \u043e\u0431\'\u0454\u043a\u0442\u0430 \u0437\u0430\u0441\u0442\u043e\u0441\u043e\u0432\u0430\u043d\u043e \u043d\u0435\u043f\u043e\u0442\u0440\u0456\u0431\u043d\u0435 \u0440\u043e\u0437\u043c\u0438\u0442\u0442\u044f","inappropriate":"\u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u043d\u0435\u0434\u043e\u0440\u0435\u0447\u043d\u0435 (\u043d\u0435 \u0441\u0442\u043e\u0441\u0443\u0454\u0442\u044c\u0441\u044f \u0442\u0435\u043c\u0438, \u043e\u0433\u043e\u043b\u0435\u043d\u0435 \u0442\u0456\u043b\u043e\u2026)","privacy":"\u0412\u0438\u0434\u043d\u043e \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u0438\u0439 \u0448\u043b\u044f\u0445 \u0430\u0431\u043e \u0432\u043b\u0430\u0441\u043d\u0456\u0441\u0442\u044c","mislocated":"\u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u043f\u043e\u0433\u0430\u043d\u043e \u0440\u043e\u0437\u0442\u0430\u0448\u043e\u0432\u0430\u043d\u0435 \u043d\u0430 \u043a\u0430\u0440\u0442\u0456","copyright":"\u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u043f\u043e\u0440\u0443\u0448\u0443\u0454 \u0430\u0432\u0442\u043e\u0440\u0441\u044c\u043a\u0456 \u043f\u0440\u0430\u0432\u0430","other":"\u0411\u0443\u0434\u044c-\u044f\u043a\u0438\u0439 \u0456\u043d\u0448\u0438\u0439 \u0432\u0438\u0434 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0438","picture_low_quality":"\u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u043d\u0438\u0437\u044c\u043a\u043e\u0457 \u044f\u043a\u043e\u0441\u0442\u0456","":"\u0412\u0438\u0431\u0435\u0440\u0456\u0442\u044c \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0438\u2026","blur_missing":"\u0412\u0438\u0434\u043d\u043e \u043e\u0431\u043b\u0438\u0447\u0447\u044f \u043b\u044e\u0434\u0438\u043d\u0438 \u0430\u0431\u043e \u043d\u043e\u043c\u0435\u0440\u043d\u0438\u0439 \u0437\u043d\u0430\u043a \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0456\u043b\u044f"},"report_email":"\u0412\u0430\u0448\u0430 \u0435\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0430 \u0430\u0434\u0440\u0435\u0441\u0430","report_email_placeholder":"\u041d\u0435\u043e\u0431\u043e\u0432\'\u044f\u0437\u043a\u043e\u0432\u043e","report_submit":"\u041d\u0430\u0434\u0456\u0441\u043b\u0430\u0442\u0438","report_success":"\u0417\u0432\u0456\u0442 \u0443\u0441\u043f\u0456\u0448\u043d\u043e \u043d\u0430\u0434\u0456\u0441\u043b\u0430\u043d\u043e. \u0419\u043e\u0433\u043e \u0431\u0443\u0434\u0435 \u0440\u043e\u0437\u0433\u043b\u044f\u043d\u0443\u0442\u043e \u044f\u043a\u043e\u043c\u043e\u0433\u0430 \u0448\u0432\u0438\u0434\u0448\u0435.","report_failure":"\u041f\u0456\u0434 \u0447\u0430\u0441 \u0441\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044f \u0437\u0432\u0456\u0442\u0443 \u0441\u0442\u0430\u043b\u0430\u0441\u044f \u043f\u043e\u043c\u0438\u043b\u043a\u0430: {e}. \u0411\u0443\u0434\u044c \u043b\u0430\u0441\u043a\u0430, \u0441\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u043f\u0456\u0437\u043d\u0456\u0448\u0435.","report_whole_sequence":"\u0426\u0435 \u0441\u0442\u043e\u0441\u0443\u0454\u0442\u044c\u0441\u044f \u0432\u0441\u0456\u0454\u0457 \u043f\u043e\u0441\u043b\u0456\u0434\u043e\u0432\u043d\u043e\u0441\u0442\u0456","report_wait":"\u041d\u0430\u0434\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u0437\u0432\u0456\u0442\u0443\u2026","semantics_save_drawn_annotation_incomplete":"\u041f\u0435\u0440\u0435\u0434 \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u043e\u044e \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u043e \u043d\u0430\u043c\u0430\u043b\u044e\u0432\u0430\u0442\u0438 \u043f\u0440\u044f\u043c\u043e\u043a\u0443\u0442\u043d\u0438\u043a, \u044f\u043a\u0438\u0439 \u043f\u043e\u043c\u0456\u0441\u0442\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u0456","semantics_hide_annotations":"\u041f\u0440\u0438\u0445\u043e\u0432\u0430\u0442\u0438 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u043e\u0431\'\u0454\u043a\u0442\u0456\u0432","semantics_doc":"\u0414\u043e\u043f\u043e\u043c\u043e\u0433\u0430","semantics_doc_title":"\u041f\u0440\u043e \u0442\u0435\u0433\u0438","semantics_erase_annotation":"\u0421\u0442\u0435\u0440\u0442\u0438 \u043d\u0430\u043c\u0430\u043b\u044c\u043e\u0432\u0430\u043d\u0438\u0439 \u0435\u043b\u0435\u043c\u0435\u043d\u0442","semantics_doc_info1":"\u041d\u0430\u0434\u0430\u0439\u0442\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043d\u0430\u0432\u043a\u043e\u043b\u043e \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u0437\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u043e\u044e \u0442\u0435\u0433\u0456\u0432. \u0412\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0437\u043d\u0430\u0447\u0438\u0442\u0438 \u0439\u043e\u0433\u043e \u044f\u043a \u0437\u043d\u044f\u0442\u0435 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0456\u043b\u0435\u043c \u0437\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u043e\u044e \u0442\u0435\u0433\u0443 transport=car.","semantics_doc_info2":"\u0412\u0438 \u0442\u0430\u043a\u043e\u0436 \u043c\u043e\u0436\u0435\u0442\u0435 \u043c\u0430\u043b\u044e\u0432\u0430\u0442\u0438 \u043e\u0431\'\u0454\u043a\u0442\u0438 \u043d\u0430 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u0456: \u0434\u043e\u0440\u043e\u0436\u043d\u0456 \u0437\u043d\u0430\u043a\u0438, \u043c\u0456\u0441\u044c\u043a\u0435 \u043e\u0431\u043b\u0430\u0434\u043d\u0430\u043d\u043d\u044f\u2026 \u041f\u043e\u0437\u043d\u0430\u0447\u0430\u0439\u0442\u0435 \u0442\u0435, \u0449\u043e \u0431\u0430\u0447\u0438\u0442\u0435, \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u044e\u0447\u0438 \u0456\u0441\u043d\u0443\u044e\u0447\u0456 \u0442\u0435\u0433\u0438. \u0417\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u0438 \u0432\u0438 \u0442\u0430\u043a\u043e\u0436 \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0442\u0432\u043e\u0440\u0438\u0442\u0438 \u0441\u0432\u043e\u0457 \u0432\u043b\u0430\u0441\u043d\u0456.","semantics_doc_info3":"\u0414\u0435\u044f\u043a\u0456 \u043e\u0431\'\u0454\u043a\u0442\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0440\u043e\u0437\u043f\u0456\u0437\u043d\u0430\u044e\u0442\u044c\u0441\u044f \u0437\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u043e\u044e \u0448\u0442\u0443\u0447\u043d\u043e\u0433\u043e \u0456\u043d\u0442\u0435\u043b\u0435\u043a\u0442\u0443: \u044f\u043a\u0456\u0441\u0442\u044c \u043d\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0443\u0454\u0442\u044c\u0441\u044f.","semantics_doc_link":"\u0414\u0456\u0437\u043d\u0430\u0439\u0442\u0435\u0441\u044f \u0431\u0456\u043b\u044c\u0448\u0435 \u043f\u0440\u043e \u0442\u0435\u0433\u0438","semantics_sequence_tags":"\u0422\u0435\u0433 \u043f\u043e\u0441\u043b\u0456\u0434\u043e\u0432\u043d\u043e\u0441\u0442\u0456","semantics_picture_tags":"\u0422\u0435\u0433 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","semantics_annotation_tags":"\u0422\u0435\u0433 \u043e\u0431\'\u0454\u043a\u0442\u0430","filter_gps_precision_lessthan":"\u041c\u0435\u043d\u0448\u0435 {n} \u043c\u0435\u0442\u0440\u0456\u0432","filter_gps_precision_morethan":"\u0411\u0456\u043b\u044c\u0448\u0435 {n} \u043c\u0435\u0442\u0440\u0456\u0432","filter_gps_precision_between":"\u0412\u0456\u0434 {n1} \u0434\u043e {n2} \u043c\u0435\u0442\u0440\u0456\u0432"},"map":{"not_public":"\u041d\u0435 \u043f\u0443\u0431\u043b\u0456\u0447\u043d\u043e \u0432\u0438\u0434\u0438\u043c\u0435","map_data":"\u041a\u0430\u0440\u0442\u0430 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0456 {m}","more_panoramax":"\u0414\u0456\u0437\u043d\u0430\u0439\u0442\u0435\u0441\u044f \u0431\u0456\u043b\u044c\u0448\u0435 \u043f\u0440\u043e Panoramax","thumbnail":"\u041c\u0456\u043d\u0456\u0430\u0442\u044e\u0440\u0430 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f, \u043d\u0430 \u044f\u043a\u0435 \u043d\u0430\u0432\u0435\u0434\u0435\u043d\u043e \u043a\u0443\u0440\u0441\u043e\u0440","slow_loading":"\u041a\u0430\u0440\u0442\u0430 \u043f\u043e\u0432\u0456\u043b\u044c\u043d\u043e \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0443\u0454\u0442\u044c\u0441\u044f \u0442\u0430 \u043c\u043e\u0436\u0435 \u0432\u0438\u0433\u043b\u044f\u0434\u0430\u0442\u0438 \u043f\u043e\u0448\u043a\u043e\u0434\u0436\u0435\u043d\u043e\u044e","loading":"\u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f\u2026"}}')},6984:ae=>{"use strict";ae.exports=JSON.parse('{"pnx":{"contrast":"\u589e\u52a0\u76f8\u7247\u5c0d\u6bd4\u5ea6","copied":"\u5df2\u8907\u88fd","copy":"\u8907\u88fd","edit_osm":"\u7de8\u8f2f OSM","error":"Panoramax \u7576\u6a5f\u4e86\u2026","error_api":"\u76f8\u7247\u4f3a\u670d\u5668\u7121\u6cd5\u4f7f\u7528","error_api_compatibility":"\u76f8\u7247\u4f3a\u670d\u5668\u548c\u6b64\u6aa2\u8996\u5668\u7684\u7248\u672c\u4e0d\u76f8\u5bb9","error_josm":"JOSM \u6c92\u6709\u56de\u61c9\uff0c\u5b83\u5df2\u7d93\u555f\u52d5\u4e14\u555f\u7528\u9060\u7aef\u63a7\u5236\u4e86\u55ce?","error_nopic":"\u641c\u5c0b\u7684\u4f4d\u7f6e\u9644\u8fd1\u6c92\u6709\u76f8\u7247","error_pic":"\u627e\u4e0d\u5230\u6307\u5b9a\u7684\u76f8\u7247","error_psv":"\u7121\u6cd5\u6b63\u78ba\u8f09\u5165 Photo Sphere Viewer","error_subtitle":"\u8acb\u7a0d\u5f8c\u91cd\u8a66\u6216\u6aa2\u67e5\u700f\u89bd\u5668\u7684\u4e3b\u63a7\u53f0\u4ee5\u4e86\u89e3\u8a73\u60c5\u3002","error_webgl":"\u60a8\u7684\u700f\u89bd\u5668\u4e0d\u652f\u63f4 WebGL","expand":"\u5c55\u958b","expand_info":"\u5728\u6574\u500b\u756b\u9762\u986f\u793a\u6b64\u5c0f\u5de5\u5177","filter_camera_model":"\u6309\u76f8\u6a5f\u578b\u865f","filter_date":"\u65e5\u671f","filter_picture":"\u76f8\u7247\u985e\u578b","filter_user":"\u4f7f\u7528\u8005","filter_zoom_in":"\u62c9\u8fd1\u5730\u5716\u4ee5\u986f\u793a\u7be9\u9078\u7d50\u679c","filters":"\u7be9\u9078\u5668","id":"iD","josm":"JOSM","josm_live":"\u555f\u7528\u8f09\u5165\u76f8\u7247\u6642\u81ea\u52d5\u540c\u6b65 JOSM","layers":"\u5716\u5c64","legend_license":"\u6388\u6b0a: {l}","loading_labels_fun":["\ud83e\udd8c \u5075\u6e2c\u5230\u7576\u5fc3\u6885\u82b1\u9e7f\u6a19\u8a8c","\ud83d\ude98 \u6b63\u5728\u641c\u5c0b Panoramax \u6c7d\u8eca \xa9","\u2615 \u6ce8\u5165\u5496\u5561\u56e0","\ud83d\ude00 \u8acb\u5fae\u7b11\uff0c\u60a8\u5df2\u88ab\u6a19\u8a18\u5728\u5730\u5716\u4e0a\u4e86\uff01","\ud83d\udc08 \u6b63\u5728\u5206\u4eab\u8c93\u54aa\u7684\u76f8\u7247","\ud83d\ude34 \u6b63\u5728\u6e1b\u5c11\u5ef6\u9072","\ud83e\uded6 \u6b63\u5728\u6c8f\u58fa\u597d\u8336","\ud83d\udc27 \u6b63\u5728\u958b\u555f\u539f\u59cb\u78bc","\ud83d\ude87 \u6b63\u5728\u7d22\u5f15\u5730\u9435\u8eca\u7ad9","\ud83e\uddf9 \u6e05\u7406\u8a6e\u91cb\u8cc7\u6599","\ud83d\ude92 \u6b63\u5728\u50b3\u9001\u6d88\u9632\u968a\u7684\u76f8\u7247","\ud83d\udeb2 \u66f4\u65b0\u7da0\u9053","\ud83d\ude89 \u6b63\u5728\u901a\u904e\u8eca\u7ad9\u6708\u53f0","\ud83d\udef0\ufe0f \u6b63\u5728\u641c\u5c0b\u885b\u661f","\ud83d\udc65 \u6b63\u5728\u64b0\u5beb\u4eba\u7269\u8a8c","\ud83c\udf57 \u6b63\u5728\u5b9a\u4f4d\u9e79\u9165\u96de\u5e97","\ud83e\uddd1\u200d\ud83d\udcbb \u6b63\u5728\u5075\u932f\u4ecb\u9762","\ud83d\udcc8 \u7d71\u8a08\u6578\u64da\u6b63\u5728\u589e\u52a0","\ud83e\udd16 \u6b63\u5728\u5b78\u7fd2\u8a9e\u7fa9","\ud83c\udfa8 \u91cd\u65b0\u8a2d\u8a08\u4ecb\u9762","\ud83d\udcc5 \u6b63\u5728\u898f\u5283\u76f8\u7247\u5730\u5716\u7e6a\u5716\u805a\u6703","\ud83e\uddc0 \u6b63\u5728\u719f\u6210\u5207\u9054\u8d77\u53f8","\ud83c\udf04 \u6b63\u5728\u8a08\u7b97\u6046\u6625\u7684\u65e5\u7167\u6642\u6578","\ud83c\udf0a \u6b63\u5728\u6e2c\u91cf\u6f6e\u6c50"],"loading_labels_serious":["\ud83d\uddfa\ufe0f \u6b63\u5728\u8f09\u5165\u5730\u5716\u8cc7\u6599","\ud83d\udda5\ufe0f \u6b63\u5728\u67e5\u8a62 API","\ud83d\uddbc\ufe0f \u6b63\u5728\u8f09\u5165\u7e2e\u5716","\ud83d\udd0d \u6b63\u5728\u5206\u6790 EXIF \u8a6e\u91cb\u8cc7\u6599","\ud83c\udfd8\ufe0f \u6b63\u5728\u7b97\u7e6a 3D","\ud83d\udcf7 \u6b63\u5728\u521d\u59cb\u5316 360\xb0 \u76f8\u7247","\ud83d\udfe0 \u6b63\u5728\u5e73\u8861\u8272\u5f69","\ud83d\udcaf \u6b63\u5728\u8a08\u7b97\u54c1\u8cea\u5206\u6578 \xa9","\ud83d\udce1 \u6b63\u5728\u4e0b\u8f09\u66f4\u65b0","\ud83c\udf0d \u6b63\u5728\u53d6\u5f97\u5730\u5716\u5716\u78da","\ud83d\udcf8 \u6b63\u5728\u8655\u7406\u9670\u5f71"],"map_background":"\u5730\u5716\u80cc\u666f","map_background_aerial":"\u885b\u661f","map_background_streets":"\u9810\u8a2d","map_theme":"\u5730\u5716\u4e3b\u984c","map_theme_age":"\u62cd\u651d\u6642\u9593","map_theme_age_1":"> 2 \u5e74","map_theme_age_2":"< 2 \u5e74","map_theme_age_3":"< 1 \u5e74","map_theme_age_4":"< 1 \u500b\u6708","map_theme_default":"\u7d93\u5178","map_theme_type":"\u76f8\u6a5f\u985e\u578b","metadata":"\u76f8\u7247\u8a6e\u91cb\u8cc7\u6599","metadata_camera":"\u76f8\u6a5f","metadata_camera_focal_length":"\u7126\u8ddd","metadata_camera_make":"\u88fd\u9020\u5546","metadata_camera_model":"\u578b\u865f","metadata_camera_type":"\u985e\u578b","metadata_exif":"EXIF","metadata_exif_name":"\u6a19\u7c64","metadata_exif_value":"\u503c","metadata_general_author":"\u4f5c\u8005","metadata_general_date":"\u62cd\u651d\u6642\u9593","metadata_general_license":"\u6388\u6b0a","metadata_general_license_link":"\u67e5\u770b\u5b8c\u6574\u6388\u6b0a\u689d\u6b3e","metadata_general_picid":"\u76f8\u7247","metadata_general_picid_link":"\u524d\u5f80\u672c\u76f8\u7247\u7684 JSON \u8aaa\u660e","metadata_general_seqid":"\u5e8f\u5217","metadata_general_seqid_link":"\u524d\u5f80\u672c\u5e8f\u5217\u7684 JSON \u8aaa\u660e","metadata_location":"\u4f4d\u7f6e","metadata_location_latitude":"\u7def\u5ea6","metadata_location_longitude":"\u7d93\u5ea6","metadata_location_orientation":"\u65b9\u5411","metadata_location_precision":"\u5b9a\u4f4d\u7cbe\u5ea6","minimize":"\u96b1\u85cf\u9019\u500b\u5c0f\u5de5\u5177\uff0c\u60a8\u53ef\u4ee5\u6309\u5de6\u4e0b\u89d2\u7684\u6309\u9215\u518d\u6b21\u986f\u793a\u5b83","moveDown":"\u4e0b\u79fb","moveLeft":"\u5de6\u79fb","moveMiddle":"\u756b\u9762\u7f6e\u4e2d","moveRight":"\u53f3\u79fb","moveUp":"\u4e0a\u79fb","options":"\u9078\u9805","picture_360":"360\xb0","picture_flat":"\u7d93\u5178","search":"\u641c\u5c0b","search_address":"\u641c\u5c0b\u5730\u5740\u3001\u57ce\u5e02\u2026","search_empty":"\u627e\u4e0d\u5230\u7d50\u679c","search_user":"\u641c\u5c0b\u5e33\u865f\u2026","sequence_more":"\u66f4\u591a\u64ad\u653e\u9078\u9805","sequence_next":"\u5e8f\u5217\u4e2d\u7684\u4e0b\u4e00\u5f35\u76f8\u7247","sequence_pause":"\u66ab\u505c\u5e8f\u5217","sequence_play":"\u64ad\u653e\u5e8f\u5217","sequence_prev":"\u5e8f\u5217\u4e2d\u7684\u4e0a\u4e00\u5f35\u76f8\u7247","sequence_speed":"\u64ad\u653e\u901f\u5ea6","share":"\u5206\u4eab","share_embed":"\u5d4c\u5165\u5230\u60a8\u7684\u7db2\u7ad9","share_image":"\u9ad8\u756b\u8cea\u76f8\u7247","share_links":"\u8d85\u9023\u7d50","share_page":"\u9019\u5f35\u76f8\u7247\u7684\u9023\u7d50","share_print":"\u5217\u5370","share_rss":"RSS \u6458\u8981","share_rss_title":"\u76ee\u524d\u5730\u5716\u53ef\u898b\u5340\u57df\u4e2d\u65b0\u76f8\u7247\u5e8f\u5217\u7684 RSS \u6458\u8981","show_map":"\u986f\u793a\u5730\u5716","show_psv":"\u986f\u793a\u76f8\u7247\u6aa2\u8996\u5668","zoom":"\u7e2e\u653e","zoomIn":"\u62c9\u8fd1","zoomOut":"\u62c9\u9060","report_submit":"\u9001\u51fa","report_email":"\u60a8\u7684 email","report_nature_label":"\u554f\u984c\u7684\u539f\u56e0","report_nature":{"":"\u9078\u64c7\u554f\u984c\u7684\u985e\u578b\u2026","blur_missing":"\u53ef\u4ee5\u770b\u898b\u4eba\u81c9\u6216\u8eca\u724c","blur_excess":"\u5c0d\u7269\u4ef6\u5957\u7528\u4e86\u4e0d\u5fc5\u8981\u7684\u6a21\u7cca\u8655\u7406","inappropriate":"\u4e0d\u7576\u7684\u76f8\u7247 (\u4e0d\u76f8\u95dc\u3001\u88f8\u9ad4\u2026)","privacy":"\u53ef\u4ee5\u770b\u898b\u79c1\u4eba\u7684\u9053\u8def\u6216\u8cc7\u7522","picture_low_quality":"\u4f4e\u54c1\u8cea\u7684\u76f8\u7247","mislocated":"\u76f8\u7247\u5728\u5730\u5716\u4e0a\u7684\u4f4d\u7f6e\u4e0d\u6b63\u78ba","copyright":"\u76f8\u7247\u4fb5\u72af\u4e86\u7248\u6b0a","other":"\u4efb\u4f55\u5176\u4ed6\u985e\u578b\u7684\u554f\u984c"},"share_embed_docs":"\u6df1\u5165\u4e86\u89e3\u5d4c\u5165\u8a2d\u5b9a\u503c","error_retry":"\u8acb\u7a0d\u5f8c\u518d\u8a66","error_click":"\u7e7c\u7e8c","legend_title":"\u986f\u793a\u76f8\u7247\u7684\u8a73\u7d30\u8cc7\u6599","report_email_placeholder":"\u9078\u586b","report_whole_sequence":"\u9019\u500b\u554f\u984c\u5f71\u97ff\u6574\u500b\u5e8f\u5217","report_details":"\u66f4\u591a\u8cc7\u8a0a","report_details_placeholder":"\u9078\u586b\uff0c\u60a8\u53ef\u4ee5\u8a73\u8ff0\u6b64\u554f\u984c","report_wait":"\u6b63\u5728\u50b3\u9001\u5831\u544a\u2026","report_success":"\u5df2\u6210\u529f\u767c\u9001\u5831\u544a\uff0c\u6211\u5011\u5c07\u5118\u5feb\u5c0d\u5b83\u9032\u884c\u5be9\u6838\u3002","report_failure":"\u5efa\u7acb\u5831\u544a\u6642\u767c\u9001\u932f\u8aa4: {e}\uff0c\u8acb\u7a0d\u5f8c\u518d\u8a66\u3002","report_auth":"\u6b64\u5831\u544a\u5c07\u4f7f\u7528\u60a8\u7684\u5e33\u6236\u300c{a}\u300d\u767c\u9001","filter_qualityscore":"\u54c1\u8cea\u5206\u6578","filter_qualityscore_help":"\u9ede\u64ca\u4ee5\u555f\u7528\u6216\u505c\u7528","map_theme_score":"\u54c1\u8cea\u5206\u6578","metadata_camera_resolution":"\u89e3\u6790\u5ea6","metadata_quality":"\u54c1\u8cea","metadata_quality_help":"\u6df1\u5165\u4e86\u89e3\u54c1\u8cea\u5206\u6578","metadata_quality_gps_score":"\u5b9a\u4f4d\u5206\u6578","metadata_quality_resolution_score":"\u89e3\u6790\u5ea6\u5206\u6578","metadata_quality_missing":"\u76f8\u7247\u672a\u5305\u542b\u8cc7\u8a0a","report":"\u6aa2\u8209","metadata_quality_score":"\u6574\u9ad4\u5206\u6578","filter_user_mypics":"\u6211\u7684\u76f8\u7247","filter_date_1month":"1 \u500b\u6708","filter_date_1year":"1 \u5e74","qualityscore_doc_2":"\u5206\u6578\u4ee5 A/B/C/D/E \u7b49\u7d1a\u7684\u5f62\u5f0f\u986f\u793a (A \u6700\u4f73\u3001E \u6700\u5dee) \uff0c\u4e26\u900f\u904e\u9019\u500b\u91cf\u5c3a\u8996\u89ba\u5316\u986f\u793a:","qualityscore_doc_link":"\u6df1\u5165\u4e86\u89e3\u54c1\u8cea\u5206\u6578","qualityscore_title":"\u95dc\u65bc\u54c1\u8cea\u5206\u6578","qualityscore_doc_1":"Panoramax \u70ba\u6bcf\u5f35\u76f8\u7247\u63d0\u4f9b\u54c1\u8cea\u5206\u6578\uff0c\u9019\u80fd\u5e6b\u52a9\u6211\u5011\u8f15\u9b06\u5730\u5728\u5730\u5716\u4e0a\u7be9\u9078\u548c\u986f\u793a\u9ad8\u54c1\u8cea\u76f8\u7247\u3002","qualityscore_doc_3":"\u5b83\u6839\u64da GPS \u7cbe\u78ba\u5ea6\u548c\u76f8\u7247\u89e3\u6790\u5ea6\u8a08\u7b97\u5f97\u51fa\uff0c\u5c08\u696d\u8a2d\u5099\u7684\u7b49\u7d1a\u70ba A\u3001360\xb0 \u904b\u52d5\u76f8\u6a5f\u7684\u7b49\u7d1a\u70ba B\u3001\u667a\u6167\u578b\u624b\u6a5f\u7684\u7b49\u7d1a\u70ba C/D/E\u3002","minimize_short":"\u96b1\u85cf","metadata_general_instance":"\u4f86\u6e90\u57f7\u884c\u500b\u9ad4","metadata_general_copy_picid":"\u8907\u88fd\u76f8\u7247 ID","metadata_general_copy_id":"\u8907\u88fd ID","picture_360_long":"\u5168\u666f\u76f8\u7247","metadata_summary":"\u6458\u8981","picture_flat_long":"\u7d93\u5178\u76f8\u7247","geo_uri":"\u5916\u90e8\u7a0b\u5f0f","contribute_id":"\u900f\u904e iD \u7de8\u8f2f\u5668\u4f86\u8ca2\u737b OpenStreetMap","filter_date_6months":"6 \u500b\u6708","picture_all":"\u5168\u90e8","metadata_exif_doc":"EXIF \u6a19\u7c64\u6587\u4ef6","metadata_exif_doc_title":"\u8acb\u53c3\u95b1 Exiv2 \u6587\u4ef6\u4ee5\u53d6\u5f97 EXIF \u548c XMP \u6a19\u7c64\u5b9a\u7fa9\u7684\u5b8c\u6574\u8aaa\u660e","metadata_location_coordinates":"\u5ea7\u6a19 (\u7d93\u5ea6, \u7def\u5ea6)","metadata_location_copy":"\u8907\u88fd {v}","metadata_location_copy_more":"\u66f4\u591a\u5ea7\u6a19\u8907\u88fd\u9078\u9805","semantics_title":"\u6a19\u7c64","semantics_tags":"{nb} \u500b\u6a19\u7c64","semantics_show_annotations":"\u986f\u793a\u76f8\u7247\u7279\u5fb5","semantics_show_all_tags":"\u986f\u793a\u6240\u6709\u6a19\u7c64","semantics_key":"\u7d22\u5f15\u9375","semantics_annotation_tooltip":"\u9ede\u64ca\u67e5\u770b\u8a73\u60c5","semantics_features_default_title":"\u6a19\u7c64 {nb}","semantics_features_subtitle":"{nb} \u500b\u95dc\u806f\u7684\u5c6c\u6027","semantics_hide_all_tags":"\u96b1\u85cf\u6240\u6709\u6a19\u7c64","semantics_features_none":"\u6b64\u76f8\u7247\u5c1a\u672a\u7e6a\u88fd\u4efb\u4f55\u7279\u5fb5\u3002","semantics_value":"\u503c","semantics_tags_picture_none":"\u6b64\u76f8\u7247\u5c1a\u672a\u52a0\u4e0a\u4efb\u4f55\u6a19\u7c64\u3002","semantics_tags_picture":"\u76f8\u7247\u6a19\u7c64","whats_panoramax":"Panoramax \u662f\u5404\u5730\u76f8\u7247\u7684\u5730\u7406\u5171\u4eab\u8cc7\u6e90\u3002","semantics_features":"\u76f8\u7247\u7279\u5fb5","semantics_key_doc":"\u6df1\u5165\u4e86\u89e3\u6b64\u7d22\u5f15\u9375","semantics_value_doc":"\u6df1\u5165\u4e86\u89e3\u6b64\u6a19\u7c64","semantics_qualifiers":"\u9650\u5b9a\u689d\u4ef6","semantics_hide_annotations":"\u96b1\u85cf\u76f8\u7247\u7279\u5fb5","semantics_zero_annotations":"\u6b64\u76f8\u7247\u5c1a\u672a\u7e6a\u88fd\u4efb\u4f55\u7279\u5fb5","semantics_hashtags":"\u76f8\u7247\u4e3b\u984c\u6a19\u7c64","semantics_wikidata_properties":{"P31":"\u96b8\u5c6c\u65bc","P279":"\u4e0a\u7d1a\u5206\u985e","P361":"\u6240\u5c6c\u5be6\u9ad4"},"panoramax":"Panoramax","semantics_editor_example":"key=value\\nprefix|key=value","semantics_edit":"\u7de8\u8f2f\u5c6c\u6027","semantics_save":"\u5132\u5b58\u8b8a\u66f4","semantics_undo":"\u53d6\u6d88\u8b8a\u66f4","semantics_cantsave_invalid":"\u7121\u6cd5\u5132\u5b58\u8b8a\u66f4\uff0c\u7121\u6548\u7684\u8f38\u5165","semantics_send_fail":"\u7121\u6cd5\u5132\u5b58\u8b8a\u66f4\uff0c\u8acb\u7a0d\u5019\u518d\u8a66","semantics_send_ok":"\u5df2\u6210\u529f\u5132\u5b58\u8b8a\u66f4","semantics_add_annotation":"\u65b0\u589e\u6a19\u7c64","semantics_save_drawn_annotation":"\u5132\u5b58\u4f4d\u7f6e","semantics_undo_drawn_annotation":"\u53d6\u6d88","semantics_delete_annotation":"\u522a\u9664\u9019\u500b\u7279\u5fb5","semantics_delete_annotation_confirm":"\u60a8\u78ba\u5b9a\u8981\u522a\u9664\u9019\u500b\u6a19\u7c64\u55ce\uff1f","semantics_save_drawn_annotation_incomplete":"\u60a8\u5fc5\u9808\u5728\u9a57\u8b49\u4e4b\u524d\u7e6a\u88fd\u4e00\u500b\u9069\u5408\u76f8\u7247\u7684\u77e9\u5f62","semantics_draw_annotation":"\u60a8\u53ef\u4ee5\u5c07\u60f3\u8981\u65b0\u589e\u7684\u7269\u4ef6\u7e6a\u88fd\u5728\u5716\u7247\u4e0a (\u9078\u7528)\u3002","semantics_editor_error":"\u8a9e\u6cd5\u7121\u6548\uff0c\u60a8\u7684\u6a19\u7c64\u770b\u8d77\u4f86\u61c9\u8a72\u8981\u50cf:\\nkey=value\\nprefix|key=value\\nprefix|key[qualif_key=qualif_val]=value\\n\\nkey \u6700\u5927\u9577\u5ea6\u70ba 256 \u500b\u5b57\u5143\uff0cvalue \u6700\u5927\u9577\u5ea6\u70ba 2048 \u500b\u5b57\u5143\u3002","semantics_login_needed":"\u82e5\u8981\u7de8\u8f2f\u76f8\u7247\u6a19\u7c64\u6216\u7279\u5fb5\uff0c\u60a8\u9700\u8981\u767b\u5165 Panoramax {n} \u57f7\u884c\u500b\u9ad4\uff0c\u60a8\u8981\u767b\u5165\u55ce\uff1f","semantics_doc":"\u8aaa\u660e","semantics_doc_title":"\u95dc\u65bc\u6a19\u7c64","semantics_erase_annotation":"\u522a\u9664\u7e6a\u88fd\u7684\u6a19\u7c64","semantics_doc_info1":"\u4f7f\u7528\u6a19\u7c64\u6a19\u8a18\u5716\u7247\u7684\u80cc\u666f\u8cc7\u8a0a\u3002\u60a8\u53ef\u4ee5\u52a0\u4e0a transport=car \u9019\u500b\u6a19\u7c64\uff0c\u5c07\u5176\u6a19\u8a18\u70ba\u99d5\u99db\u6c7d\u8eca\u62cd\u651d\u3002","semantics_doc_info2":"\u60a8\u4e5f\u53ef\u4ee5\u5728\u5716\u7247\u4e2d\u6a19\u8a18\u7269\u4ef6\uff1a\u9053\u8def\u6a19\u8a8c\u3001\u90fd\u5e02\u8a2d\u5099\u7b49\u3002\u4f7f\u7528\u73fe\u6709\u7684\u6a19\u7c64\u6a19\u8a18\u60a8\u6240\u770b\u5230\u7684\uff0c\u4e5f\u53ef\u4ee5\u6309\u7167\u9700\u6c42\u5efa\u7acb\u81ea\u5df1\u7684\u6a19\u7c64\u3002","semantics_doc_info3":"\u6709\u4e9b\u7269\u4ef6\u662f\u7531 AI \u81ea\u52d5\u5075\u6e2c\u7684\uff0c\u56e0\u6b64\u4e0d\u4fdd\u8b49\u54c1\u8cea\u3002","semantics_doc_link":"\u6df1\u5165\u4e86\u89e3\u6a19\u7c64","semantics_sequence_tags":"\u5e8f\u5217\u6a19\u7c64","semantics_picture_tags":"\u76f8\u7247\u6a19\u7c64","semantics_annotation_tags":"\u7269\u4ef6\u6a19\u7c64"},"map":{"loading":"\u6b63\u5728\u8f09\u5165\u2026","not_public":"\u672a\u516c\u958b\u986f\u793a","thumbnail":"\u904a\u6a19\u61f8\u505c\u76f8\u7247\u7684\u7e2e\u5716","slow_loading":"\u5730\u5716\u8f09\u5165\u901f\u5ea6\u7de9\u6162\u800c\u4e14\u53ef\u80fd\u51fa\u73fe\u640d\u58de","more_panoramax":"\u6df1\u5165\u4e86\u89e3 Panoramax","map_data":"\u5730\u5716\u8cc7\u6599: {m}"},"psv":{"ctrlZoom":"\u4f7f\u7528 CTRL + \u6ed1\u9f20\u6efe\u8f2a\u7e2e\u653e\u5716\u7247","loadError":"\u7121\u6cd5\u8f09\u5165\u5168\u666f\u5716","twoFingers":"\u4f7f\u7528\u96d9\u6307\u79fb\u52d5"},"maplibre":{"GeolocateControl.FindMyLocation":"\u5c0b\u627e\u6211\u7684\u4f4d\u7f6e","GeolocateControl.LocationNotAvailable":"\u7121\u6cd5\u4f7f\u7528\u4f4d\u7f6e\u8cc7\u8a0a"}}')}},ue={};function __webpack_require__(nt){var ut=ue[nt];if(void 0!==ut)return ut.exports;var qt=ue[nt]={exports:{}};return ae[nt].call(qt.exports,qt,qt.exports,__webpack_require__),qt.exports}__webpack_require__.n=ae=>{var ue=ae&&ae.__esModule?()=>ae.default:()=>ae;return __webpack_require__.d(ue,{a:ue}),ue},__webpack_require__.d=(ae,ue)=>{for(var nt in ue)__webpack_require__.o(ue,nt)&&!__webpack_require__.o(ae,nt)&&Object.defineProperty(ae,nt,{enumerable:!0,get:ue[nt]})},__webpack_require__.o=(ae,ue)=>Object.prototype.hasOwnProperty.call(ae,ue),__webpack_require__.r=ae=>{"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(ae,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(ae,"__esModule",{value:!0})};var nt={};return(()=>{"use strict";__webpack_require__.r(nt),__webpack_require__.d(nt,{CoverageMap:()=>qt.A,Editor:()=>Yt.A,PhotoViewer:()=>Xt.Ay,Viewer:()=>ut.A,components:()=>ae,utils:()=>ue});var ae=__webpack_require__(9341),ue=__webpack_require__(2030),ut=__webpack_require__(8743),qt=__webpack_require__(153),Yt=__webpack_require__(1752),Xt=__webpack_require__(3407)})(),nt})()));
2922
+ */function WebGLAnimation(){let ae=null,ue=!1,nt=null,ut=null;function onAnimationFrame(ue,qt){nt(ue,qt),ut=ae.requestAnimationFrame(onAnimationFrame)}return{start:function(){!0!==ue&&null!==nt&&(ut=ae.requestAnimationFrame(onAnimationFrame),ue=!0)},stop:function(){ae.cancelAnimationFrame(ut),ue=!1},setAnimationLoop:function(ae){nt=ae},setContext:function(ue){ae=ue}}}function WebGLAttributes(ae){const ue=new WeakMap;return{get:function(ae){return ae.isInterleavedBufferAttribute&&(ae=ae.data),ue.get(ae)},remove:function(nt){nt.isInterleavedBufferAttribute&&(nt=nt.data);const ut=ue.get(nt);ut&&(ae.deleteBuffer(ut.buffer),ue.delete(nt))},update:function(nt,ut){if(nt.isInterleavedBufferAttribute&&(nt=nt.data),nt.isGLBufferAttribute){const ae=ue.get(nt);return void((!ae||ae.version<nt.version)&&ue.set(nt,{buffer:nt.buffer,type:nt.type,bytesPerElement:nt.elementSize,version:nt.version}))}const qt=ue.get(nt);if(void 0===qt)ue.set(nt,function(ue,nt){const ut=ue.array,qt=ue.usage,Yt=ut.byteLength,Xt=ae.createBuffer();let ys;if(ae.bindBuffer(nt,Xt),ae.bufferData(nt,ut,qt),ue.onUploadCallback(),ut instanceof Float32Array)ys=ae.FLOAT;else if("undefined"!==typeof Float16Array&&ut instanceof Float16Array)ys=ae.HALF_FLOAT;else if(ut instanceof Uint16Array)ys=ue.isFloat16BufferAttribute?ae.HALF_FLOAT:ae.UNSIGNED_SHORT;else if(ut instanceof Int16Array)ys=ae.SHORT;else if(ut instanceof Uint32Array)ys=ae.UNSIGNED_INT;else if(ut instanceof Int32Array)ys=ae.INT;else if(ut instanceof Int8Array)ys=ae.BYTE;else if(ut instanceof Uint8Array)ys=ae.UNSIGNED_BYTE;else{if(!(ut instanceof Uint8ClampedArray))throw new Error("THREE.WebGLAttributes: Unsupported buffer data format: "+ut);ys=ae.UNSIGNED_BYTE}return{buffer:Xt,type:ys,bytesPerElement:ut.BYTES_PER_ELEMENT,version:ue.version,size:Yt}}(nt,ut));else if(qt.version<nt.version){if(qt.size!==nt.array.byteLength)throw new Error("THREE.WebGLAttributes: The size of the buffer attribute's array buffer does not match the original size. Resizing buffer attributes is not supported.");!function(ue,nt,ut){const qt=nt.array,Yt=nt.updateRanges;if(ae.bindBuffer(ut,ue),0===Yt.length)ae.bufferSubData(ut,0,qt);else{Yt.sort(((ae,ue)=>ae.start-ue.start));let ue=0;for(let ae=1;ae<Yt.length;ae++){const nt=Yt[ue],ut=Yt[ae];ut.start<=nt.start+nt.count+1?nt.count=Math.max(nt.count,ut.start+ut.count-nt.start):(++ue,Yt[ue]=ut)}Yt.length=ue+1;for(let nt=0,Xt=Yt.length;nt<Xt;nt++){const ue=Yt[nt];ae.bufferSubData(ut,ue.start*qt.BYTES_PER_ELEMENT,qt,ue.start,ue.count)}nt.clearUpdateRanges()}nt.onUploadCallback()}(qt.buffer,nt,ut),qt.version=nt.version}}}}const qt={alphahash_fragment:"#ifdef USE_ALPHAHASH\n\tif ( diffuseColor.a < getAlphaHashThreshold( vPosition ) ) discard;\n#endif",alphahash_pars_fragment:"#ifdef USE_ALPHAHASH\n\tconst float ALPHA_HASH_SCALE = 0.05;\n\tfloat hash2D( vec2 value ) {\n\t\treturn fract( 1.0e4 * sin( 17.0 * value.x + 0.1 * value.y ) * ( 0.1 + abs( sin( 13.0 * value.y + value.x ) ) ) );\n\t}\n\tfloat hash3D( vec3 value ) {\n\t\treturn hash2D( vec2( hash2D( value.xy ), value.z ) );\n\t}\n\tfloat getAlphaHashThreshold( vec3 position ) {\n\t\tfloat maxDeriv = max(\n\t\t\tlength( dFdx( position.xyz ) ),\n\t\t\tlength( dFdy( position.xyz ) )\n\t\t);\n\t\tfloat pixScale = 1.0 / ( ALPHA_HASH_SCALE * maxDeriv );\n\t\tvec2 pixScales = vec2(\n\t\t\texp2( floor( log2( pixScale ) ) ),\n\t\t\texp2( ceil( log2( pixScale ) ) )\n\t\t);\n\t\tvec2 alpha = vec2(\n\t\t\thash3D( floor( pixScales.x * position.xyz ) ),\n\t\t\thash3D( floor( pixScales.y * position.xyz ) )\n\t\t);\n\t\tfloat lerpFactor = fract( log2( pixScale ) );\n\t\tfloat x = ( 1.0 - lerpFactor ) * alpha.x + lerpFactor * alpha.y;\n\t\tfloat a = min( lerpFactor, 1.0 - lerpFactor );\n\t\tvec3 cases = vec3(\n\t\t\tx * x / ( 2.0 * a * ( 1.0 - a ) ),\n\t\t\t( x - 0.5 * a ) / ( 1.0 - a ),\n\t\t\t1.0 - ( ( 1.0 - x ) * ( 1.0 - x ) / ( 2.0 * a * ( 1.0 - a ) ) )\n\t\t);\n\t\tfloat threshold = ( x < ( 1.0 - a ) )\n\t\t\t? ( ( x < a ) ? cases.x : cases.y )\n\t\t\t: cases.z;\n\t\treturn clamp( threshold , 1.0e-6, 1.0 );\n\t}\n#endif",alphamap_fragment:"#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vAlphaMapUv ).g;\n#endif",alphamap_pars_fragment:"#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",alphatest_fragment:"#ifdef USE_ALPHATEST\n\t#ifdef ALPHA_TO_COVERAGE\n\tdiffuseColor.a = smoothstep( alphaTest, alphaTest + fwidth( diffuseColor.a ), diffuseColor.a );\n\tif ( diffuseColor.a == 0.0 ) discard;\n\t#else\n\tif ( diffuseColor.a < alphaTest ) discard;\n\t#endif\n#endif",alphatest_pars_fragment:"#ifdef USE_ALPHATEST\n\tuniform float alphaTest;\n#endif",aomap_fragment:"#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vAoMapUv ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_CLEARCOAT ) \n\t\tclearcoatSpecularIndirect *= ambientOcclusion;\n\t#endif\n\t#if defined( USE_SHEEN ) \n\t\tsheenSpecularIndirect *= ambientOcclusion;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD )\n\t\tfloat dotNV = saturate( dot( geometryNormal, geometryViewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );\n\t#endif\n#endif",aomap_pars_fragment:"#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif",batching_pars_vertex:"#ifdef USE_BATCHING\n\t#if ! defined( GL_ANGLE_multi_draw )\n\t#define gl_DrawID _gl_DrawID\n\tuniform int _gl_DrawID;\n\t#endif\n\tuniform highp sampler2D batchingTexture;\n\tuniform highp usampler2D batchingIdTexture;\n\tmat4 getBatchingMatrix( const in float i ) {\n\t\tint size = textureSize( batchingTexture, 0 ).x;\n\t\tint j = int( i ) * 4;\n\t\tint x = j % size;\n\t\tint y = j / size;\n\t\tvec4 v1 = texelFetch( batchingTexture, ivec2( x, y ), 0 );\n\t\tvec4 v2 = texelFetch( batchingTexture, ivec2( x + 1, y ), 0 );\n\t\tvec4 v3 = texelFetch( batchingTexture, ivec2( x + 2, y ), 0 );\n\t\tvec4 v4 = texelFetch( batchingTexture, ivec2( x + 3, y ), 0 );\n\t\treturn mat4( v1, v2, v3, v4 );\n\t}\n\tfloat getIndirectIndex( const in int i ) {\n\t\tint size = textureSize( batchingIdTexture, 0 ).x;\n\t\tint x = i % size;\n\t\tint y = i / size;\n\t\treturn float( texelFetch( batchingIdTexture, ivec2( x, y ), 0 ).r );\n\t}\n#endif\n#ifdef USE_BATCHING_COLOR\n\tuniform sampler2D batchingColorTexture;\n\tvec3 getBatchingColor( const in float i ) {\n\t\tint size = textureSize( batchingColorTexture, 0 ).x;\n\t\tint j = int( i );\n\t\tint x = j % size;\n\t\tint y = j / size;\n\t\treturn texelFetch( batchingColorTexture, ivec2( x, y ), 0 ).rgb;\n\t}\n#endif",batching_vertex:"#ifdef USE_BATCHING\n\tmat4 batchingMatrix = getBatchingMatrix( getIndirectIndex( gl_DrawID ) );\n#endif",begin_vertex:"vec3 transformed = vec3( position );\n#ifdef USE_ALPHAHASH\n\tvPosition = vec3( position );\n#endif",beginnormal_vertex:"vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n\tvec3 objectTangent = vec3( tangent.xyz );\n#endif",bsdfs:"float G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, 1.0, dotVH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n} // validated",iridescence_fragment:"#ifdef USE_IRIDESCENCE\n\tconst mat3 XYZ_TO_REC709 = mat3(\n\t\t 3.2404542, -0.9692660, 0.0556434,\n\t\t-1.5371385, 1.8760108, -0.2040259,\n\t\t-0.4985314, 0.0415560, 1.0572252\n\t);\n\tvec3 Fresnel0ToIor( vec3 fresnel0 ) {\n\t\tvec3 sqrtF0 = sqrt( fresnel0 );\n\t\treturn ( vec3( 1.0 ) + sqrtF0 ) / ( vec3( 1.0 ) - sqrtF0 );\n\t}\n\tvec3 IorToFresnel0( vec3 transmittedIor, float incidentIor ) {\n\t\treturn pow2( ( transmittedIor - vec3( incidentIor ) ) / ( transmittedIor + vec3( incidentIor ) ) );\n\t}\n\tfloat IorToFresnel0( float transmittedIor, float incidentIor ) {\n\t\treturn pow2( ( transmittedIor - incidentIor ) / ( transmittedIor + incidentIor ));\n\t}\n\tvec3 evalSensitivity( float OPD, vec3 shift ) {\n\t\tfloat phase = 2.0 * PI * OPD * 1.0e-9;\n\t\tvec3 val = vec3( 5.4856e-13, 4.4201e-13, 5.2481e-13 );\n\t\tvec3 pos = vec3( 1.6810e+06, 1.7953e+06, 2.2084e+06 );\n\t\tvec3 var = vec3( 4.3278e+09, 9.3046e+09, 6.6121e+09 );\n\t\tvec3 xyz = val * sqrt( 2.0 * PI * var ) * cos( pos * phase + shift ) * exp( - pow2( phase ) * var );\n\t\txyz.x += 9.7470e-14 * sqrt( 2.0 * PI * 4.5282e+09 ) * cos( 2.2399e+06 * phase + shift[ 0 ] ) * exp( - 4.5282e+09 * pow2( phase ) );\n\t\txyz /= 1.0685e-7;\n\t\tvec3 rgb = XYZ_TO_REC709 * xyz;\n\t\treturn rgb;\n\t}\n\tvec3 evalIridescence( float outsideIOR, float eta2, float cosTheta1, float thinFilmThickness, vec3 baseF0 ) {\n\t\tvec3 I;\n\t\tfloat iridescenceIOR = mix( outsideIOR, eta2, smoothstep( 0.0, 0.03, thinFilmThickness ) );\n\t\tfloat sinTheta2Sq = pow2( outsideIOR / iridescenceIOR ) * ( 1.0 - pow2( cosTheta1 ) );\n\t\tfloat cosTheta2Sq = 1.0 - sinTheta2Sq;\n\t\tif ( cosTheta2Sq < 0.0 ) {\n\t\t\treturn vec3( 1.0 );\n\t\t}\n\t\tfloat cosTheta2 = sqrt( cosTheta2Sq );\n\t\tfloat R0 = IorToFresnel0( iridescenceIOR, outsideIOR );\n\t\tfloat R12 = F_Schlick( R0, 1.0, cosTheta1 );\n\t\tfloat T121 = 1.0 - R12;\n\t\tfloat phi12 = 0.0;\n\t\tif ( iridescenceIOR < outsideIOR ) phi12 = PI;\n\t\tfloat phi21 = PI - phi12;\n\t\tvec3 baseIOR = Fresnel0ToIor( clamp( baseF0, 0.0, 0.9999 ) );\t\tvec3 R1 = IorToFresnel0( baseIOR, iridescenceIOR );\n\t\tvec3 R23 = F_Schlick( R1, 1.0, cosTheta2 );\n\t\tvec3 phi23 = vec3( 0.0 );\n\t\tif ( baseIOR[ 0 ] < iridescenceIOR ) phi23[ 0 ] = PI;\n\t\tif ( baseIOR[ 1 ] < iridescenceIOR ) phi23[ 1 ] = PI;\n\t\tif ( baseIOR[ 2 ] < iridescenceIOR ) phi23[ 2 ] = PI;\n\t\tfloat OPD = 2.0 * iridescenceIOR * thinFilmThickness * cosTheta2;\n\t\tvec3 phi = vec3( phi21 ) + phi23;\n\t\tvec3 R123 = clamp( R12 * R23, 1e-5, 0.9999 );\n\t\tvec3 r123 = sqrt( R123 );\n\t\tvec3 Rs = pow2( T121 ) * R23 / ( vec3( 1.0 ) - R123 );\n\t\tvec3 C0 = R12 + Rs;\n\t\tI = C0;\n\t\tvec3 Cm = Rs - T121;\n\t\tfor ( int m = 1; m <= 2; ++ m ) {\n\t\t\tCm *= r123;\n\t\t\tvec3 Sm = 2.0 * evalSensitivity( float( m ) * OPD, float( m ) * phi );\n\t\t\tI += Cm * Sm;\n\t\t}\n\t\treturn max( I, vec3( 0.0 ) );\n\t}\n#endif",bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vBumpMapUv );\n\t\tvec2 dSTdy = dFdy( vBumpMapUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vBumpMapUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\n\t\tvec3 vSigmaX = normalize( dFdx( surf_pos.xyz ) );\n\t\tvec3 vSigmaY = normalize( dFdy( surf_pos.xyz ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif",clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#ifdef ALPHA_TO_COVERAGE\n\t\tfloat distanceToPlane, distanceGradient;\n\t\tfloat clipOpacity = 1.0;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tdistanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\n\t\t\tdistanceGradient = fwidth( distanceToPlane ) / 2.0;\n\t\t\tclipOpacity *= smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\n\t\t\tif ( clipOpacity == 0.0 ) discard;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\t\tfloat unionClipOpacity = 1.0;\n\t\t\t#pragma unroll_loop_start\n\t\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\t\tplane = clippingPlanes[ i ];\n\t\t\t\tdistanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\n\t\t\t\tdistanceGradient = fwidth( distanceToPlane ) / 2.0;\n\t\t\t\tunionClipOpacity *= 1.0 - smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\n\t\t\t}\n\t\t\t#pragma unroll_loop_end\n\t\t\tclipOpacity *= 1.0 - unionClipOpacity;\n\t\t#endif\n\t\tdiffuseColor.a *= clipOpacity;\n\t\tif ( diffuseColor.a == 0.0 ) discard;\n\t#else\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\t\tbool clipped = true;\n\t\t\t#pragma unroll_loop_start\n\t\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\t\tplane = clippingPlanes[ i ];\n\t\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t\t}\n\t\t\t#pragma unroll_loop_end\n\t\t\tif ( clipped ) discard;\n\t\t#endif\n\t#endif\n#endif",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif",color_fragment:"#if defined( USE_COLOR_ALPHA )\n\tdiffuseColor *= vColor;\n#elif defined( USE_COLOR )\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR )\n\tvarying vec3 vColor;\n#endif",color_pars_vertex:"#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )\n\tvarying vec3 vColor;\n#endif",color_vertex:"#if defined( USE_COLOR_ALPHA )\n\tvColor = vec4( 1.0 );\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor *= color;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif\n#ifdef USE_BATCHING_COLOR\n\tvec3 batchingColor = getBatchingColor( getIndirectIndex( gl_DrawID ) );\n\tvColor.xyz *= batchingColor.xyz;\n#endif",common:"#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nvec3 pow2( const in vec3 x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\nfloat average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract( sin( sn ) * c );\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\n#ifdef USE_ALPHAHASH\n\tvarying vec3 vPosition;\n#endif\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}\nvec3 BRDF_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {\n\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n}\nfloat F_Schlick( const in float f0, const in float f90, const in float dotVH ) {\n\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n} // validated",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\thighp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tuv.x += filterInt * 3.0 * cubeUV_minTileSize;\n\t\tuv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize );\n\t\tuv.x *= CUBEUV_TEXEL_WIDTH;\n\t\tuv.y *= CUBEUV_TEXEL_HEIGHT;\n\t\t#ifdef texture2DGradEXT\n\t\t\treturn texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb;\n\t\t#else\n\t\t\treturn texture2D( envMap, uv ).rgb;\n\t\t#endif\n\t}\n\t#define cubeUV_r0 1.0\n\t#define cubeUV_m0 - 2.0\n\t#define cubeUV_r1 0.8\n\t#define cubeUV_m1 - 1.0\n\t#define cubeUV_r4 0.4\n\t#define cubeUV_m4 2.0\n\t#define cubeUV_r5 0.305\n\t#define cubeUV_m5 3.0\n\t#define cubeUV_r6 0.21\n\t#define cubeUV_m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= cubeUV_r1 ) {\n\t\t\tmip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0;\n\t\t} else if ( roughness >= cubeUV_r4 ) {\n\t\t\tmip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1;\n\t\t} else if ( roughness >= cubeUV_r5 ) {\n\t\t\tmip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4;\n\t\t} else if ( roughness >= cubeUV_r6 ) {\n\t\t\tmip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif",defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = objectTangent;\n#endif\n#ifdef USE_BATCHING\n\tmat3 bm = mat3( batchingMatrix );\n\ttransformedNormal /= vec3( dot( bm[ 0 ], bm[ 0 ] ), dot( bm[ 1 ], bm[ 1 ] ), dot( bm[ 2 ], bm[ 2 ] ) );\n\ttransformedNormal = bm * transformedNormal;\n\t#ifdef USE_TANGENT\n\t\ttransformedTangent = bm * transformedTangent;\n\t#endif\n#endif\n#ifdef USE_INSTANCING\n\tmat3 im = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( im[ 0 ], im[ 0 ] ), dot( im[ 1 ], im[ 1 ] ), dot( im[ 2 ], im[ 2 ] ) );\n\ttransformedNormal = im * transformedNormal;\n\t#ifdef USE_TANGENT\n\t\ttransformedTangent = im * transformedTangent;\n\t#endif\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\ttransformedTangent = ( modelViewMatrix * vec4( transformedTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv );\n\t#ifdef DECODE_VIDEO_TEXTURE_EMISSIVE\n\t\temissiveColor = sRGBTransferEOTF( emissiveColor );\n\t#endif\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",colorspace_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",colorspace_pars_fragment:"vec4 LinearTransferOETF( in vec4 value ) {\n\treturn value;\n}\nvec4 sRGBTransferEOTF( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 sRGBTransferOETF( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}",envmap_fragment:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, envMapRotation * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif",envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform mat3 envMapRotation;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif",envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif",envmap_physical_pars_fragment:"#ifdef USE_ENVMAP\n\tvec3 getIBLIrradiance( const in vec3 normal ) {\n\t\t#ifdef ENVMAP_TYPE_CUBE_UV\n\t\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, envMapRotation * worldNormal, 1.0 );\n\t\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\n\t\t#ifdef ENVMAP_TYPE_CUBE_UV\n\t\t\tvec3 reflectVec = reflect( - viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, envMapRotation * reflectVec, roughness );\n\t\t\treturn envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n\t#ifdef USE_ANISOTROPY\n\t\tvec3 getIBLAnisotropyRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in vec3 bitangent, const in float anisotropy ) {\n\t\t\t#ifdef ENVMAP_TYPE_CUBE_UV\n\t\t\t\tvec3 bentNormal = cross( bitangent, viewDir );\n\t\t\t\tbentNormal = normalize( cross( bentNormal, bitangent ) );\n\t\t\t\tbentNormal = normalize( mix( bentNormal, normal, pow2( pow2( 1.0 - anisotropy * ( 1.0 - roughness ) ) ) ) );\n\t\t\t\treturn getIBLRadiance( viewDir, bentNormal, roughness );\n\t\t\t#else\n\t\t\t\treturn vec3( 0.0 );\n\t\t\t#endif\n\t\t}\n\t#endif\n#endif",envmap_vertex:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif",fog_vertex:"#ifdef USE_FOG\n\tvFogDepth = - mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float vFogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float vFogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif",gradientmap_pars_fragment:"#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn vec3( texture2D( gradientMap, coord ).r );\n\t#else\n\t\tvec2 fw = fwidth( coord ) * 0.5;\n\t\treturn mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) );\n\t#endif\n}",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_fragment:"LambertMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularStrength = specularStrength;",lights_lambert_pars_fragment:"varying vec3 vViewPosition;\nstruct LambertMaterial {\n\tvec3 diffuseColor;\n\tfloat specularStrength;\n};\nvoid RE_Direct_Lambert( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Lambert\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Lambert",lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\n#if defined( USE_LIGHT_PROBES )\n\tuniform vec3 lightProbe[ 9 ];\n#endif\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\n\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\treturn irradiance;\n}\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\tif ( cutoffDistance > 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n}\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\n\treturn smoothstep( coneCosine, penumbraCosine, angleCosine );\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalLightInfo( const in DirectionalLight directionalLight, out IncidentLight light ) {\n\t\tlight.color = directionalLight.color;\n\t\tlight.direction = directionalLight.direction;\n\t\tlight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointLightInfo( const in PointLight pointLight, const in vec3 geometryPosition, out IncidentLight light ) {\n\t\tvec3 lVector = pointLight.position - geometryPosition;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tlight.color = pointLight.color;\n\t\tlight.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\n\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotLightInfo( const in SpotLight spotLight, const in vec3 geometryPosition, out IncidentLight light ) {\n\t\tvec3 lVector = spotLight.position - geometryPosition;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat angleCos = dot( light.direction, spotLight.direction );\n\t\tfloat spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\tif ( spotAttenuation > 0.0 ) {\n\t\t\tfloat lightDistance = length( lVector );\n\t\t\tlight.color = spotLight.color * spotAttenuation;\n\t\t\tlight.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t\t} else {\n\t\t\tlight.color = vec3( 0.0 );\n\t\t\tlight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\n\t\tfloat dotNL = dot( normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\treturn irradiance;\n\t}\n#endif",lights_toon_fragment:"ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;",lights_toon_pars_fragment:"varying vec3 vViewPosition;\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometryNormal, directLight.direction ) * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometryViewDir, geometryNormal, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( nonPerturbedNormal ) ), abs( dFdy( nonPerturbedNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;\nmaterial.roughness = min( material.roughness, 1.0 );\n#ifdef IOR\n\tmaterial.ior = ior;\n\t#ifdef USE_SPECULAR\n\t\tfloat specularIntensityFactor = specularIntensity;\n\t\tvec3 specularColorFactor = specularColor;\n\t\t#ifdef USE_SPECULAR_COLORMAP\n\t\t\tspecularColorFactor *= texture2D( specularColorMap, vSpecularColorMapUv ).rgb;\n\t\t#endif\n\t\t#ifdef USE_SPECULAR_INTENSITYMAP\n\t\t\tspecularIntensityFactor *= texture2D( specularIntensityMap, vSpecularIntensityMapUv ).a;\n\t\t#endif\n\t\tmaterial.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\n\t#else\n\t\tfloat specularIntensityFactor = 1.0;\n\t\tvec3 specularColorFactor = vec3( 1.0 );\n\t\tmaterial.specularF90 = 1.0;\n\t#endif\n\tmaterial.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.specularF90 = 1.0;\n#endif\n#ifdef USE_CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\tmaterial.clearcoatF0 = vec3( 0.04 );\n\tmaterial.clearcoatF90 = 1.0;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vClearcoatMapUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vClearcoatRoughnessMapUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_DISPERSION\n\tmaterial.dispersion = dispersion;\n#endif\n#ifdef USE_IRIDESCENCE\n\tmaterial.iridescence = iridescence;\n\tmaterial.iridescenceIOR = iridescenceIOR;\n\t#ifdef USE_IRIDESCENCEMAP\n\t\tmaterial.iridescence *= texture2D( iridescenceMap, vIridescenceMapUv ).r;\n\t#endif\n\t#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\t\tmaterial.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vIridescenceThicknessMapUv ).g + iridescenceThicknessMinimum;\n\t#else\n\t\tmaterial.iridescenceThickness = iridescenceThicknessMaximum;\n\t#endif\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheenColor;\n\t#ifdef USE_SHEEN_COLORMAP\n\t\tmaterial.sheenColor *= texture2D( sheenColorMap, vSheenColorMapUv ).rgb;\n\t#endif\n\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\n\t#ifdef USE_SHEEN_ROUGHNESSMAP\n\t\tmaterial.sheenRoughness *= texture2D( sheenRoughnessMap, vSheenRoughnessMapUv ).a;\n\t#endif\n#endif\n#ifdef USE_ANISOTROPY\n\t#ifdef USE_ANISOTROPYMAP\n\t\tmat2 anisotropyMat = mat2( anisotropyVector.x, anisotropyVector.y, - anisotropyVector.y, anisotropyVector.x );\n\t\tvec3 anisotropyPolar = texture2D( anisotropyMap, vAnisotropyMapUv ).rgb;\n\t\tvec2 anisotropyV = anisotropyMat * normalize( 2.0 * anisotropyPolar.rg - vec2( 1.0 ) ) * anisotropyPolar.b;\n\t#else\n\t\tvec2 anisotropyV = anisotropyVector;\n\t#endif\n\tmaterial.anisotropy = length( anisotropyV );\n\tif( material.anisotropy == 0.0 ) {\n\t\tanisotropyV = vec2( 1.0, 0.0 );\n\t} else {\n\t\tanisotropyV /= material.anisotropy;\n\t\tmaterial.anisotropy = saturate( material.anisotropy );\n\t}\n\tmaterial.alphaT = mix( pow2( material.roughness ), 1.0, pow2( material.anisotropy ) );\n\tmaterial.anisotropyT = tbn[ 0 ] * anisotropyV.x + tbn[ 1 ] * anisotropyV.y;\n\tmaterial.anisotropyB = tbn[ 1 ] * anisotropyV.x - tbn[ 0 ] * anisotropyV.y;\n#endif",lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat roughness;\n\tvec3 specularColor;\n\tfloat specularF90;\n\tfloat dispersion;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat clearcoat;\n\t\tfloat clearcoatRoughness;\n\t\tvec3 clearcoatF0;\n\t\tfloat clearcoatF90;\n\t#endif\n\t#ifdef USE_IRIDESCENCE\n\t\tfloat iridescence;\n\t\tfloat iridescenceIOR;\n\t\tfloat iridescenceThickness;\n\t\tvec3 iridescenceFresnel;\n\t\tvec3 iridescenceF0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tvec3 sheenColor;\n\t\tfloat sheenRoughness;\n\t#endif\n\t#ifdef IOR\n\t\tfloat ior;\n\t#endif\n\t#ifdef USE_TRANSMISSION\n\t\tfloat transmission;\n\t\tfloat transmissionAlpha;\n\t\tfloat thickness;\n\t\tfloat attenuationDistance;\n\t\tvec3 attenuationColor;\n\t#endif\n\t#ifdef USE_ANISOTROPY\n\t\tfloat anisotropy;\n\t\tfloat alphaT;\n\t\tvec3 anisotropyT;\n\t\tvec3 anisotropyB;\n\t#endif\n};\nvec3 clearcoatSpecularDirect = vec3( 0.0 );\nvec3 clearcoatSpecularIndirect = vec3( 0.0 );\nvec3 sheenSpecularDirect = vec3( 0.0 );\nvec3 sheenSpecularIndirect = vec3(0.0 );\nvec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH ) {\n float x = clamp( 1.0 - dotVH, 0.0, 1.0 );\n float x2 = x * x;\n float x5 = clamp( x * x2 * x2, 0.0, 0.9999 );\n return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 );\n}\nfloat V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\n#ifdef USE_ANISOTROPY\n\tfloat V_GGX_SmithCorrelated_Anisotropic( const in float alphaT, const in float alphaB, const in float dotTV, const in float dotBV, const in float dotTL, const in float dotBL, const in float dotNV, const in float dotNL ) {\n\t\tfloat gv = dotNL * length( vec3( alphaT * dotTV, alphaB * dotBV, dotNV ) );\n\t\tfloat gl = dotNV * length( vec3( alphaT * dotTL, alphaB * dotBL, dotNL ) );\n\t\tfloat v = 0.5 / ( gv + gl );\n\t\treturn saturate(v);\n\t}\n\tfloat D_GGX_Anisotropic( const in float alphaT, const in float alphaB, const in float dotNH, const in float dotTH, const in float dotBH ) {\n\t\tfloat a2 = alphaT * alphaB;\n\t\thighp vec3 v = vec3( alphaB * dotTH, alphaT * dotBH, a2 * dotNH );\n\t\thighp float v2 = dot( v, v );\n\t\tfloat w2 = a2 / v2;\n\t\treturn RECIPROCAL_PI * a2 * pow2 ( w2 );\n\t}\n#endif\n#ifdef USE_CLEARCOAT\n\tvec3 BRDF_GGX_Clearcoat( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material) {\n\t\tvec3 f0 = material.clearcoatF0;\n\t\tfloat f90 = material.clearcoatF90;\n\t\tfloat roughness = material.clearcoatRoughness;\n\t\tfloat alpha = pow2( roughness );\n\t\tvec3 halfDir = normalize( lightDir + viewDir );\n\t\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\t\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\t\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\t\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\t\tvec3 F = F_Schlick( f0, f90, dotVH );\n\t\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\t\tfloat D = D_GGX( alpha, dotNH );\n\t\treturn F * ( V * D );\n\t}\n#endif\nvec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material ) {\n\tvec3 f0 = material.specularColor;\n\tfloat f90 = material.specularF90;\n\tfloat roughness = material.roughness;\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\tvec3 F = F_Schlick( f0, f90, dotVH );\n\t#ifdef USE_IRIDESCENCE\n\t\tF = mix( F, material.iridescenceFresnel, material.iridescence );\n\t#endif\n\t#ifdef USE_ANISOTROPY\n\t\tfloat dotTL = dot( material.anisotropyT, lightDir );\n\t\tfloat dotTV = dot( material.anisotropyT, viewDir );\n\t\tfloat dotTH = dot( material.anisotropyT, halfDir );\n\t\tfloat dotBL = dot( material.anisotropyB, lightDir );\n\t\tfloat dotBV = dot( material.anisotropyB, viewDir );\n\t\tfloat dotBH = dot( material.anisotropyB, halfDir );\n\t\tfloat V = V_GGX_SmithCorrelated_Anisotropic( material.alphaT, alpha, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL );\n\t\tfloat D = D_GGX_Anisotropic( material.alphaT, alpha, dotNH, dotTH, dotBH );\n\t#else\n\t\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\t\tfloat D = D_GGX( alpha, dotNH );\n\t#endif\n\treturn F * ( V * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie( float roughness, float dotNH ) {\n\tfloat alpha = pow2( roughness );\n\tfloat invAlpha = 1.0 / alpha;\n\tfloat cos2h = dotNH * dotNH;\n\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 );\n\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\n}\nfloat V_Neubelt( float dotNV, float dotNL ) {\n\treturn saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\n}\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat D = D_Charlie( sheenRoughness, dotNH );\n\tfloat V = V_Neubelt( dotNV, dotNL );\n\treturn sheenColor * ( D * V );\n}\n#endif\nfloat IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat r2 = roughness * roughness;\n\tfloat a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95;\n\tfloat b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72;\n\tfloat DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) );\n\treturn saturate( DG * RECIPROCAL_PI );\n}\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\tvec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\n\treturn fab;\n}\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\treturn specularColor * fab.x + specularF90 * fab.y;\n}\n#ifdef USE_IRIDESCENCE\nvoid computeMultiscatteringIridescence( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float iridescence, const in vec3 iridescenceF0, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#else\nvoid computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#endif\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\t#ifdef USE_IRIDESCENCE\n\t\tvec3 Fr = mix( specularColor, iridescenceF0, iridescence );\n\t#else\n\t\tvec3 Fr = specularColor;\n\t#endif\n\tvec3 FssEss = Fr * fab.x + specularF90 * fab.y;\n\tfloat Ess = fab.x + fab.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometryNormal;\n\t\tvec3 viewDir = geometryViewDir;\n\t\tvec3 position = geometryPosition;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.roughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNLcc = saturate( dot( geometryClearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = dotNLcc * directLight.color;\n\t\tclearcoatSpecularDirect += ccIrradiance * BRDF_GGX_Clearcoat( directLight.direction, geometryViewDir, geometryClearcoatNormal, material );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecularDirect += irradiance * BRDF_Sheen( directLight.direction, geometryViewDir, geometryNormal, material.sheenColor, material.sheenRoughness );\n\t#endif\n\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometryViewDir, geometryNormal, material );\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatSpecularIndirect += clearcoatRadiance * EnvironmentBRDF( geometryClearcoatNormal, geometryViewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecularIndirect += irradiance * material.sheenColor * IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness );\n\t#endif\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\t#ifdef USE_IRIDESCENCE\n\t\tcomputeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering );\n\t#else\n\t\tcomputeMultiscattering( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\n\t#endif\n\tvec3 totalScattering = singleScattering + multiScattering;\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) );\n\treflectedLight.indirectSpecular += radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}",lights_fragment_begin:"\nvec3 geometryPosition = - vViewPosition;\nvec3 geometryNormal = normal;\nvec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\nvec3 geometryClearcoatNormal = vec3( 0.0 );\n#ifdef USE_CLEARCOAT\n\tgeometryClearcoatNormal = clearcoatNormal;\n#endif\n#ifdef USE_IRIDESCENCE\n\tfloat dotNVi = saturate( dot( normal, geometryViewDir ) );\n\tif ( material.iridescenceThickness == 0.0 ) {\n\t\tmaterial.iridescence = 0.0;\n\t} else {\n\t\tmaterial.iridescence = saturate( material.iridescence );\n\t}\n\tif ( material.iridescence > 0.0 ) {\n\t\tmaterial.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor );\n\t\tmaterial.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi );\n\t}\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointLightInfo( pointLight, geometryPosition, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowIntensity, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\tvec4 spotColor;\n\tvec3 spotLightCoord;\n\tbool inSpotLightMap;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotLightInfo( spotLight, geometryPosition, directLight );\n\t\t#if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n\t\t#define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX\n\t\t#elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\t#define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS\n\t\t#else\n\t\t#define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n\t\t#endif\n\t\t#if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS )\n\t\t\tspotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w;\n\t\t\tinSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) );\n\t\t\tspotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy );\n\t\t\tdirectLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color;\n\t\t#endif\n\t\t#undef SPOT_LIGHT_MAP_INDEX\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowIntensity, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalLightInfo( directionalLight, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowIntensity, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\t#if defined( USE_LIGHT_PROBES )\n\t\tirradiance += getLightProbeIrradiance( lightProbe, geometryNormal );\n\t#endif\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometryNormal );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif",lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n\t\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getIBLIrradiance( geometryNormal );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\t#ifdef USE_ANISOTROPY\n\t\tradiance += getIBLAnisotropyRadiance( geometryViewDir, geometryNormal, material.roughness, material.anisotropyB, material.anisotropy );\n\t#else\n\t\tradiance += getIBLRadiance( geometryViewDir, geometryNormal, material.roughness );\n\t#endif\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatRadiance += getIBLRadiance( geometryViewDir, geometryClearcoatNormal, material.clearcoatRoughness );\n\t#endif\n#endif",lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF )\n\tgl_FragDepth = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\tvFragDepth = 1.0 + gl_Position.w;\n\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n#endif",map_fragment:"#ifdef USE_MAP\n\tvec4 sampledDiffuseColor = texture2D( map, vMapUv );\n\t#ifdef DECODE_VIDEO_TEXTURE\n\t\tsampledDiffuseColor = sRGBTransferEOTF( sampledDiffuseColor );\n\t#endif\n\tdiffuseColor *= sampledDiffuseColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\t#if defined( USE_POINTS_UV )\n\t\tvec2 uv = vUv;\n\t#else\n\t\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n\t#endif\n#endif\n#ifdef USE_MAP\n\tdiffuseColor *= texture2D( map, uv );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif",map_particle_pars_fragment:"#if defined( USE_POINTS_UV )\n\tvarying vec2 vUv;\n#else\n\t#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\t\tuniform mat3 uvTransform;\n\t#endif\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphinstance_vertex:"#ifdef USE_INSTANCING_MORPH\n\tfloat morphTargetInfluences[ MORPHTARGETS_COUNT ];\n\tfloat morphTargetBaseInfluence = texelFetch( morphTexture, ivec2( 0, gl_InstanceID ), 0 ).r;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\tmorphTargetInfluences[i] = texelFetch( morphTexture, ivec2( i + 1, gl_InstanceID ), 0 ).r;\n\t}\n#endif",morphcolor_vertex:"#if defined( USE_MORPHCOLORS )\n\tvColor *= morphTargetBaseInfluence;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t#if defined( USE_COLOR_ALPHA )\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ];\n\t\t#elif defined( USE_COLOR )\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];\n\t\t#endif\n\t}\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\tif ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];\n\t}\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\t#ifndef USE_INSTANCING_MORPH\n\t\tuniform float morphTargetBaseInfluence;\n\t\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\n\t#endif\n\tuniform sampler2DArray morphTargetsTexture;\n\tuniform ivec2 morphTargetsTextureSize;\n\tvec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {\n\t\tint texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;\n\t\tint y = texelIndex / morphTargetsTextureSize.x;\n\t\tint x = texelIndex - y * morphTargetsTextureSize.x;\n\t\tivec3 morphUV = ivec3( x, y, morphTargetIndex );\n\t\treturn texelFetch( morphTargetsTexture, morphUV, 0 );\n\t}\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\tif ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];\n\t}\n#endif",normal_fragment_begin:"float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n#ifdef FLAT_SHADED\n\tvec3 fdx = dFdx( vViewPosition );\n\tvec3 fdy = dFdy( vViewPosition );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal *= faceDirection;\n\t#endif\n#endif\n#if defined( USE_NORMALMAP_TANGENTSPACE ) || defined( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY )\n\t#ifdef USE_TANGENT\n\t\tmat3 tbn = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\n\t#else\n\t\tmat3 tbn = getTangentFrame( - vViewPosition, normal,\n\t\t#if defined( USE_NORMALMAP )\n\t\t\tvNormalMapUv\n\t\t#elif defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tvClearcoatNormalMapUv\n\t\t#else\n\t\t\tvUv\n\t\t#endif\n\t\t);\n\t#endif\n\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\n\t\ttbn[0] *= faceDirection;\n\t\ttbn[1] *= faceDirection;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\t#ifdef USE_TANGENT\n\t\tmat3 tbn2 = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\n\t#else\n\t\tmat3 tbn2 = getTangentFrame( - vViewPosition, normal, vClearcoatNormalMapUv );\n\t#endif\n\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\n\t\ttbn2[0] *= faceDirection;\n\t\ttbn2[1] *= faceDirection;\n\t#endif\n#endif\nvec3 nonPerturbedNormal = normal;",normal_fragment_maps:"#ifdef USE_NORMALMAP_OBJECTSPACE\n\tnormal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( USE_NORMALMAP_TANGENTSPACE )\n\tvec3 mapN = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\tnormal = normalize( tbn * mapN );\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\n#endif",normal_pars_fragment:"#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif",normal_pars_vertex:"#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif",normal_vertex:"#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef USE_NORMALMAP_OBJECTSPACE\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( USE_NORMALMAP_TANGENTSPACE ) || defined ( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY ) )\n\tmat3 getTangentFrame( vec3 eye_pos, vec3 surf_norm, vec2 uv ) {\n\t\tvec3 q0 = dFdx( eye_pos.xyz );\n\t\tvec3 q1 = dFdy( eye_pos.xyz );\n\t\tvec2 st0 = dFdx( uv.st );\n\t\tvec2 st1 = dFdy( uv.st );\n\t\tvec3 N = surf_norm;\n\t\tvec3 q1perp = cross( q1, N );\n\t\tvec3 q0perp = cross( N, q0 );\n\t\tvec3 T = q1perp * st0.x + q0perp * st1.x;\n\t\tvec3 B = q1perp * st0.y + q0perp * st1.y;\n\t\tfloat det = max( dot( T, T ), dot( B, B ) );\n\t\tfloat scale = ( det == 0.0 ) ? 0.0 : inversesqrt( det );\n\t\treturn mat3( T * scale, B * scale, N );\n\t}\n#endif",clearcoat_normal_fragment_begin:"#ifdef USE_CLEARCOAT\n\tvec3 clearcoatNormal = nonPerturbedNormal;\n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\tclearcoatNormal = normalize( tbn2 * clearcoatMapN );\n#endif",clearcoat_pars_fragment:"#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif",iridescence_pars_fragment:"#ifdef USE_IRIDESCENCEMAP\n\tuniform sampler2D iridescenceMap;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tuniform sampler2D iridescenceThicknessMap;\n#endif",opaque_fragment:"#ifdef OPAQUE\ndiffuseColor.a = 1.0;\n#endif\n#ifdef USE_TRANSMISSION\ndiffuseColor.a *= material.transmissionAlpha;\n#endif\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );",packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;const float ShiftRight8 = 1. / 256.;\nconst float Inv255 = 1. / 255.;\nconst vec4 PackFactors = vec4( 1.0, 256.0, 256.0 * 256.0, 256.0 * 256.0 * 256.0 );\nconst vec2 UnpackFactors2 = vec2( UnpackDownscale, 1.0 / PackFactors.g );\nconst vec3 UnpackFactors3 = vec3( UnpackDownscale / PackFactors.rg, 1.0 / PackFactors.b );\nconst vec4 UnpackFactors4 = vec4( UnpackDownscale / PackFactors.rgb, 1.0 / PackFactors.a );\nvec4 packDepthToRGBA( const in float v ) {\n\tif( v <= 0.0 )\n\t\treturn vec4( 0., 0., 0., 0. );\n\tif( v >= 1.0 )\n\t\treturn vec4( 1., 1., 1., 1. );\n\tfloat vuf;\n\tfloat af = modf( v * PackFactors.a, vuf );\n\tfloat bf = modf( vuf * ShiftRight8, vuf );\n\tfloat gf = modf( vuf * ShiftRight8, vuf );\n\treturn vec4( vuf * Inv255, gf * PackUpscale, bf * PackUpscale, af );\n}\nvec3 packDepthToRGB( const in float v ) {\n\tif( v <= 0.0 )\n\t\treturn vec3( 0., 0., 0. );\n\tif( v >= 1.0 )\n\t\treturn vec3( 1., 1., 1. );\n\tfloat vuf;\n\tfloat bf = modf( v * PackFactors.b, vuf );\n\tfloat gf = modf( vuf * ShiftRight8, vuf );\n\treturn vec3( vuf * Inv255, gf * PackUpscale, bf );\n}\nvec2 packDepthToRG( const in float v ) {\n\tif( v <= 0.0 )\n\t\treturn vec2( 0., 0. );\n\tif( v >= 1.0 )\n\t\treturn vec2( 1., 1. );\n\tfloat vuf;\n\tfloat gf = modf( v * 256., vuf );\n\treturn vec2( vuf * Inv255, gf );\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors4 );\n}\nfloat unpackRGBToDepth( const in vec3 v ) {\n\treturn dot( v, UnpackFactors3 );\n}\nfloat unpackRGToDepth( const in vec2 v ) {\n\treturn v.r * UnpackFactors2.r + v.g * UnpackFactors2.g;\n}\nvec4 pack2HalfToRGBA( const in vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\n}\nvec2 unpackRGBATo2Half( const in vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float depth, const in float near, const in float far ) {\n\treturn depth * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float depth, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * depth - far );\n}",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_BATCHING\n\tmvPosition = batchingMatrix * mvPosition;\n#endif\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",dithering_pars_fragment:"#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#if NUM_SPOT_LIGHT_COORDS > 0\n\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#if NUM_SPOT_LIGHT_MAPS > 0\n\tuniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ];\n#endif\n#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\tfloat depth = unpackRGBAToDepth( texture2D( depths, uv ) );\n\t\t#ifdef USE_REVERSEDEPTHBUF\n\t\t\treturn step( depth, compare );\n\t\t#else\n\t\t\treturn step( compare, depth );\n\t\t#endif\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\t#ifdef USE_REVERSEDEPTHBUF\n\t\t\tfloat hard_shadow = step( distribution.x, compare );\n\t\t#else\n\t\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\t#endif\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\n\t\tbool frustumTest = inFrustum && shadowCoord.z <= 1.0;\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn mix( 1.0, shadow, shadowIntensity );\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tfloat shadow = 1.0;\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\t\n\t\tfloat lightToPositionLength = length( lightToPosition );\n\t\tif ( lightToPositionLength - shadowCameraFar <= 0.0 && lightToPositionLength - shadowCameraNear >= 0.0 ) {\n\t\t\tfloat dp = ( lightToPositionLength - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\t\tdp += shadowBias;\n\t\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\t\tshadow = (\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t\t) * ( 1.0 / 9.0 );\n\t\t\t#else\n\t\t\t\tshadow = texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t\t#endif\n\t\t}\n\t\treturn mix( 1.0, shadow, shadowIntensity );\n\t}\n#endif",shadowmap_pars_vertex:"#if NUM_SPOT_LIGHT_COORDS > 0\n\tuniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ];\n\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif",shadowmap_vertex:"#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 )\n\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\tvec4 shadowWorldPosition;\n#endif\n#if defined( USE_SHADOWMAP )\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if NUM_SPOT_LIGHT_COORDS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition;\n\t\t#if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\t\tshadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias;\n\t\t#endif\n\t\tvSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n#endif",shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowIntensity, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowIntensity, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowIntensity, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}",skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\tuniform highp sampler2D boneTexture;\n\tmat4 getBoneMatrix( const in float i ) {\n\t\tint size = textureSize( boneTexture, 0 ).x;\n\t\tint j = int( i ) * 4;\n\t\tint x = j % size;\n\t\tint y = j / size;\n\t\tvec4 v1 = texelFetch( boneTexture, ivec2( x, y ), 0 );\n\t\tvec4 v2 = texelFetch( boneTexture, ivec2( x + 1, y ), 0 );\n\t\tvec4 v3 = texelFetch( boneTexture, ivec2( x + 2, y ), 0 );\n\t\tvec4 v4 = texelFetch( boneTexture, ivec2( x + 3, y ), 0 );\n\t\treturn mat4( v1, v2, v3, v4 );\n\t}\n#endif",skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vSpecularMapUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",tonemapping_pars_fragment:"#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn saturate( toneMappingExposure * color );\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 CineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nconst mat3 LINEAR_REC2020_TO_LINEAR_SRGB = mat3(\n\tvec3( 1.6605, - 0.1246, - 0.0182 ),\n\tvec3( - 0.5876, 1.1329, - 0.1006 ),\n\tvec3( - 0.0728, - 0.0083, 1.1187 )\n);\nconst mat3 LINEAR_SRGB_TO_LINEAR_REC2020 = mat3(\n\tvec3( 0.6274, 0.0691, 0.0164 ),\n\tvec3( 0.3293, 0.9195, 0.0880 ),\n\tvec3( 0.0433, 0.0113, 0.8956 )\n);\nvec3 agxDefaultContrastApprox( vec3 x ) {\n\tvec3 x2 = x * x;\n\tvec3 x4 = x2 * x2;\n\treturn + 15.5 * x4 * x2\n\t\t- 40.14 * x4 * x\n\t\t+ 31.96 * x4\n\t\t- 6.868 * x2 * x\n\t\t+ 0.4298 * x2\n\t\t+ 0.1191 * x\n\t\t- 0.00232;\n}\nvec3 AgXToneMapping( vec3 color ) {\n\tconst mat3 AgXInsetMatrix = mat3(\n\t\tvec3( 0.856627153315983, 0.137318972929847, 0.11189821299995 ),\n\t\tvec3( 0.0951212405381588, 0.761241990602591, 0.0767994186031903 ),\n\t\tvec3( 0.0482516061458583, 0.101439036467562, 0.811302368396859 )\n\t);\n\tconst mat3 AgXOutsetMatrix = mat3(\n\t\tvec3( 1.1271005818144368, - 0.1413297634984383, - 0.14132976349843826 ),\n\t\tvec3( - 0.11060664309660323, 1.157823702216272, - 0.11060664309660294 ),\n\t\tvec3( - 0.016493938717834573, - 0.016493938717834257, 1.2519364065950405 )\n\t);\n\tconst float AgxMinEv = - 12.47393;\tconst float AgxMaxEv = 4.026069;\n\tcolor *= toneMappingExposure;\n\tcolor = LINEAR_SRGB_TO_LINEAR_REC2020 * color;\n\tcolor = AgXInsetMatrix * color;\n\tcolor = max( color, 1e-10 );\tcolor = log2( color );\n\tcolor = ( color - AgxMinEv ) / ( AgxMaxEv - AgxMinEv );\n\tcolor = clamp( color, 0.0, 1.0 );\n\tcolor = agxDefaultContrastApprox( color );\n\tcolor = AgXOutsetMatrix * color;\n\tcolor = pow( max( vec3( 0.0 ), color ), vec3( 2.2 ) );\n\tcolor = LINEAR_REC2020_TO_LINEAR_SRGB * color;\n\tcolor = clamp( color, 0.0, 1.0 );\n\treturn color;\n}\nvec3 NeutralToneMapping( vec3 color ) {\n\tconst float StartCompression = 0.8 - 0.04;\n\tconst float Desaturation = 0.15;\n\tcolor *= toneMappingExposure;\n\tfloat x = min( color.r, min( color.g, color.b ) );\n\tfloat offset = x < 0.08 ? x - 6.25 * x * x : 0.04;\n\tcolor -= offset;\n\tfloat peak = max( color.r, max( color.g, color.b ) );\n\tif ( peak < StartCompression ) return color;\n\tfloat d = 1. - StartCompression;\n\tfloat newPeak = 1. - d * d / ( peak + d - StartCompression );\n\tcolor *= newPeak / peak;\n\tfloat g = 1. - 1. / ( Desaturation * ( peak - newPeak ) + 1. );\n\treturn mix( color, vec3( newPeak ), g );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }",transmission_fragment:"#ifdef USE_TRANSMISSION\n\tmaterial.transmission = transmission;\n\tmaterial.transmissionAlpha = 1.0;\n\tmaterial.thickness = thickness;\n\tmaterial.attenuationDistance = attenuationDistance;\n\tmaterial.attenuationColor = attenuationColor;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\tmaterial.transmission *= texture2D( transmissionMap, vTransmissionMapUv ).r;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tmaterial.thickness *= texture2D( thicknessMap, vThicknessMapUv ).g;\n\t#endif\n\tvec3 pos = vWorldPosition;\n\tvec3 v = normalize( cameraPosition - pos );\n\tvec3 n = inverseTransformDirection( normal, viewMatrix );\n\tvec4 transmitted = getIBLVolumeRefraction(\n\t\tn, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,\n\t\tpos, modelMatrix, viewMatrix, projectionMatrix, material.dispersion, material.ior, material.thickness,\n\t\tmaterial.attenuationColor, material.attenuationDistance );\n\tmaterial.transmissionAlpha = mix( material.transmissionAlpha, transmitted.a, material.transmission );\n\ttotalDiffuse = mix( totalDiffuse, transmitted.rgb, material.transmission );\n#endif",transmission_pars_fragment:"#ifdef USE_TRANSMISSION\n\tuniform float transmission;\n\tuniform float thickness;\n\tuniform float attenuationDistance;\n\tuniform vec3 attenuationColor;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\tuniform sampler2D transmissionMap;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tuniform sampler2D thicknessMap;\n\t#endif\n\tuniform vec2 transmissionSamplerSize;\n\tuniform sampler2D transmissionSamplerMap;\n\tuniform mat4 modelMatrix;\n\tuniform mat4 projectionMatrix;\n\tvarying vec3 vWorldPosition;\n\tfloat w0( float a ) {\n\t\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - a + 3.0 ) - 3.0 ) + 1.0 );\n\t}\n\tfloat w1( float a ) {\n\t\treturn ( 1.0 / 6.0 ) * ( a * a * ( 3.0 * a - 6.0 ) + 4.0 );\n\t}\n\tfloat w2( float a ){\n\t\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - 3.0 * a + 3.0 ) + 3.0 ) + 1.0 );\n\t}\n\tfloat w3( float a ) {\n\t\treturn ( 1.0 / 6.0 ) * ( a * a * a );\n\t}\n\tfloat g0( float a ) {\n\t\treturn w0( a ) + w1( a );\n\t}\n\tfloat g1( float a ) {\n\t\treturn w2( a ) + w3( a );\n\t}\n\tfloat h0( float a ) {\n\t\treturn - 1.0 + w1( a ) / ( w0( a ) + w1( a ) );\n\t}\n\tfloat h1( float a ) {\n\t\treturn 1.0 + w3( a ) / ( w2( a ) + w3( a ) );\n\t}\n\tvec4 bicubic( sampler2D tex, vec2 uv, vec4 texelSize, float lod ) {\n\t\tuv = uv * texelSize.zw + 0.5;\n\t\tvec2 iuv = floor( uv );\n\t\tvec2 fuv = fract( uv );\n\t\tfloat g0x = g0( fuv.x );\n\t\tfloat g1x = g1( fuv.x );\n\t\tfloat h0x = h0( fuv.x );\n\t\tfloat h1x = h1( fuv.x );\n\t\tfloat h0y = h0( fuv.y );\n\t\tfloat h1y = h1( fuv.y );\n\t\tvec2 p0 = ( vec2( iuv.x + h0x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\n\t\tvec2 p1 = ( vec2( iuv.x + h1x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\n\t\tvec2 p2 = ( vec2( iuv.x + h0x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\n\t\tvec2 p3 = ( vec2( iuv.x + h1x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\n\t\treturn g0( fuv.y ) * ( g0x * textureLod( tex, p0, lod ) + g1x * textureLod( tex, p1, lod ) ) +\n\t\t\tg1( fuv.y ) * ( g0x * textureLod( tex, p2, lod ) + g1x * textureLod( tex, p3, lod ) );\n\t}\n\tvec4 textureBicubic( sampler2D sampler, vec2 uv, float lod ) {\n\t\tvec2 fLodSize = vec2( textureSize( sampler, int( lod ) ) );\n\t\tvec2 cLodSize = vec2( textureSize( sampler, int( lod + 1.0 ) ) );\n\t\tvec2 fLodSizeInv = 1.0 / fLodSize;\n\t\tvec2 cLodSizeInv = 1.0 / cLodSize;\n\t\tvec4 fSample = bicubic( sampler, uv, vec4( fLodSizeInv, fLodSize ), floor( lod ) );\n\t\tvec4 cSample = bicubic( sampler, uv, vec4( cLodSizeInv, cLodSize ), ceil( lod ) );\n\t\treturn mix( fSample, cSample, fract( lod ) );\n\t}\n\tvec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {\n\t\tvec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\n\t\tvec3 modelScale;\n\t\tmodelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\n\t\tmodelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\n\t\tmodelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\n\t\treturn normalize( refractionVector ) * thickness * modelScale;\n\t}\n\tfloat applyIorToRoughness( const in float roughness, const in float ior ) {\n\t\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\n\t}\n\tvec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {\n\t\tfloat lod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\n\t\treturn textureBicubic( transmissionSamplerMap, fragCoord.xy, lod );\n\t}\n\tvec3 volumeAttenuation( const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {\n\t\tif ( isinf( attenuationDistance ) ) {\n\t\t\treturn vec3( 1.0 );\n\t\t} else {\n\t\t\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\n\t\t\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance );\t\t\treturn transmittance;\n\t\t}\n\t}\n\tvec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,\n\t\tconst in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,\n\t\tconst in mat4 viewMatrix, const in mat4 projMatrix, const in float dispersion, const in float ior, const in float thickness,\n\t\tconst in vec3 attenuationColor, const in float attenuationDistance ) {\n\t\tvec4 transmittedLight;\n\t\tvec3 transmittance;\n\t\t#ifdef USE_DISPERSION\n\t\t\tfloat halfSpread = ( ior - 1.0 ) * 0.025 * dispersion;\n\t\t\tvec3 iors = vec3( ior - halfSpread, ior, ior + halfSpread );\n\t\t\tfor ( int i = 0; i < 3; i ++ ) {\n\t\t\t\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, iors[ i ], modelMatrix );\n\t\t\t\tvec3 refractedRayExit = position + transmissionRay;\n\t\t\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n\t\t\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\t\t\trefractionCoords += 1.0;\n\t\t\t\trefractionCoords /= 2.0;\n\t\t\t\tvec4 transmissionSample = getTransmissionSample( refractionCoords, roughness, iors[ i ] );\n\t\t\t\ttransmittedLight[ i ] = transmissionSample[ i ];\n\t\t\t\ttransmittedLight.a += transmissionSample.a;\n\t\t\t\ttransmittance[ i ] = diffuseColor[ i ] * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance )[ i ];\n\t\t\t}\n\t\t\ttransmittedLight.a /= 3.0;\n\t\t#else\n\t\t\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\n\t\t\tvec3 refractedRayExit = position + transmissionRay;\n\t\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n\t\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\t\trefractionCoords += 1.0;\n\t\t\trefractionCoords /= 2.0;\n\t\t\ttransmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\n\t\t\ttransmittance = diffuseColor * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance );\n\t\t#endif\n\t\tvec3 attenuatedColor = transmittance * transmittedLight.rgb;\n\t\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\n\t\tfloat transmittanceFactor = ( transmittance.r + transmittance.g + transmittance.b ) / 3.0;\n\t\treturn vec4( ( 1.0 - F ) * attenuatedColor, 1.0 - ( 1.0 - transmittedLight.a ) * transmittanceFactor );\n\t}\n#endif",uv_pars_fragment:"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n\tvarying vec2 vUv;\n#endif\n#ifdef USE_MAP\n\tvarying vec2 vMapUv;\n#endif\n#ifdef USE_ALPHAMAP\n\tvarying vec2 vAlphaMapUv;\n#endif\n#ifdef USE_LIGHTMAP\n\tvarying vec2 vLightMapUv;\n#endif\n#ifdef USE_AOMAP\n\tvarying vec2 vAoMapUv;\n#endif\n#ifdef USE_BUMPMAP\n\tvarying vec2 vBumpMapUv;\n#endif\n#ifdef USE_NORMALMAP\n\tvarying vec2 vNormalMapUv;\n#endif\n#ifdef USE_EMISSIVEMAP\n\tvarying vec2 vEmissiveMapUv;\n#endif\n#ifdef USE_METALNESSMAP\n\tvarying vec2 vMetalnessMapUv;\n#endif\n#ifdef USE_ROUGHNESSMAP\n\tvarying vec2 vRoughnessMapUv;\n#endif\n#ifdef USE_ANISOTROPYMAP\n\tvarying vec2 vAnisotropyMapUv;\n#endif\n#ifdef USE_CLEARCOATMAP\n\tvarying vec2 vClearcoatMapUv;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tvarying vec2 vClearcoatNormalMapUv;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tvarying vec2 vClearcoatRoughnessMapUv;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n\tvarying vec2 vIridescenceMapUv;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tvarying vec2 vIridescenceThicknessMapUv;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n\tvarying vec2 vSheenColorMapUv;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n\tvarying vec2 vSheenRoughnessMapUv;\n#endif\n#ifdef USE_SPECULARMAP\n\tvarying vec2 vSpecularMapUv;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n\tvarying vec2 vSpecularColorMapUv;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n\tvarying vec2 vSpecularIntensityMapUv;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n\tuniform mat3 transmissionMapTransform;\n\tvarying vec2 vTransmissionMapUv;\n#endif\n#ifdef USE_THICKNESSMAP\n\tuniform mat3 thicknessMapTransform;\n\tvarying vec2 vThicknessMapUv;\n#endif",uv_pars_vertex:"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n\tvarying vec2 vUv;\n#endif\n#ifdef USE_MAP\n\tuniform mat3 mapTransform;\n\tvarying vec2 vMapUv;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform mat3 alphaMapTransform;\n\tvarying vec2 vAlphaMapUv;\n#endif\n#ifdef USE_LIGHTMAP\n\tuniform mat3 lightMapTransform;\n\tvarying vec2 vLightMapUv;\n#endif\n#ifdef USE_AOMAP\n\tuniform mat3 aoMapTransform;\n\tvarying vec2 vAoMapUv;\n#endif\n#ifdef USE_BUMPMAP\n\tuniform mat3 bumpMapTransform;\n\tvarying vec2 vBumpMapUv;\n#endif\n#ifdef USE_NORMALMAP\n\tuniform mat3 normalMapTransform;\n\tvarying vec2 vNormalMapUv;\n#endif\n#ifdef USE_DISPLACEMENTMAP\n\tuniform mat3 displacementMapTransform;\n\tvarying vec2 vDisplacementMapUv;\n#endif\n#ifdef USE_EMISSIVEMAP\n\tuniform mat3 emissiveMapTransform;\n\tvarying vec2 vEmissiveMapUv;\n#endif\n#ifdef USE_METALNESSMAP\n\tuniform mat3 metalnessMapTransform;\n\tvarying vec2 vMetalnessMapUv;\n#endif\n#ifdef USE_ROUGHNESSMAP\n\tuniform mat3 roughnessMapTransform;\n\tvarying vec2 vRoughnessMapUv;\n#endif\n#ifdef USE_ANISOTROPYMAP\n\tuniform mat3 anisotropyMapTransform;\n\tvarying vec2 vAnisotropyMapUv;\n#endif\n#ifdef USE_CLEARCOATMAP\n\tuniform mat3 clearcoatMapTransform;\n\tvarying vec2 vClearcoatMapUv;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform mat3 clearcoatNormalMapTransform;\n\tvarying vec2 vClearcoatNormalMapUv;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform mat3 clearcoatRoughnessMapTransform;\n\tvarying vec2 vClearcoatRoughnessMapUv;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n\tuniform mat3 sheenColorMapTransform;\n\tvarying vec2 vSheenColorMapUv;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n\tuniform mat3 sheenRoughnessMapTransform;\n\tvarying vec2 vSheenRoughnessMapUv;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n\tuniform mat3 iridescenceMapTransform;\n\tvarying vec2 vIridescenceMapUv;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tuniform mat3 iridescenceThicknessMapTransform;\n\tvarying vec2 vIridescenceThicknessMapUv;\n#endif\n#ifdef USE_SPECULARMAP\n\tuniform mat3 specularMapTransform;\n\tvarying vec2 vSpecularMapUv;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n\tuniform mat3 specularColorMapTransform;\n\tvarying vec2 vSpecularColorMapUv;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n\tuniform mat3 specularIntensityMapTransform;\n\tvarying vec2 vSpecularIntensityMapUv;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n\tuniform mat3 transmissionMapTransform;\n\tvarying vec2 vTransmissionMapUv;\n#endif\n#ifdef USE_THICKNESSMAP\n\tuniform mat3 thicknessMapTransform;\n\tvarying vec2 vThicknessMapUv;\n#endif",uv_vertex:"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n\tvUv = vec3( uv, 1 ).xy;\n#endif\n#ifdef USE_MAP\n\tvMapUv = ( mapTransform * vec3( MAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ALPHAMAP\n\tvAlphaMapUv = ( alphaMapTransform * vec3( ALPHAMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_LIGHTMAP\n\tvLightMapUv = ( lightMapTransform * vec3( LIGHTMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_AOMAP\n\tvAoMapUv = ( aoMapTransform * vec3( AOMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_BUMPMAP\n\tvBumpMapUv = ( bumpMapTransform * vec3( BUMPMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_NORMALMAP\n\tvNormalMapUv = ( normalMapTransform * vec3( NORMALMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_DISPLACEMENTMAP\n\tvDisplacementMapUv = ( displacementMapTransform * vec3( DISPLACEMENTMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_EMISSIVEMAP\n\tvEmissiveMapUv = ( emissiveMapTransform * vec3( EMISSIVEMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_METALNESSMAP\n\tvMetalnessMapUv = ( metalnessMapTransform * vec3( METALNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ROUGHNESSMAP\n\tvRoughnessMapUv = ( roughnessMapTransform * vec3( ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ANISOTROPYMAP\n\tvAnisotropyMapUv = ( anisotropyMapTransform * vec3( ANISOTROPYMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOATMAP\n\tvClearcoatMapUv = ( clearcoatMapTransform * vec3( CLEARCOATMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tvClearcoatNormalMapUv = ( clearcoatNormalMapTransform * vec3( CLEARCOAT_NORMALMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tvClearcoatRoughnessMapUv = ( clearcoatRoughnessMapTransform * vec3( CLEARCOAT_ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n\tvIridescenceMapUv = ( iridescenceMapTransform * vec3( IRIDESCENCEMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tvIridescenceThicknessMapUv = ( iridescenceThicknessMapTransform * vec3( IRIDESCENCE_THICKNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n\tvSheenColorMapUv = ( sheenColorMapTransform * vec3( SHEEN_COLORMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n\tvSheenRoughnessMapUv = ( sheenRoughnessMapTransform * vec3( SHEEN_ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULARMAP\n\tvSpecularMapUv = ( specularMapTransform * vec3( SPECULARMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n\tvSpecularColorMapUv = ( specularColorMapTransform * vec3( SPECULAR_COLORMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n\tvSpecularIntensityMapUv = ( specularIntensityMapTransform * vec3( SPECULAR_INTENSITYMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n\tvTransmissionMapUv = ( transmissionMapTransform * vec3( TRANSMISSIONMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_THICKNESSMAP\n\tvThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_BATCHING\n\t\tworldPosition = batchingMatrix * worldPosition;\n\t#endif\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif",background_vert:"varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}",background_frag:"uniform sampler2D t2D;\nuniform float backgroundIntensity;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\t#ifdef DECODE_VIDEO_TEXTURE\n\t\ttexColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w );\n\t#endif\n\ttexColor.rgb *= backgroundIntensity;\n\tgl_FragColor = texColor;\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n}",backgroundCube_vert:"varying vec3 vWorldDirection;\n#include <common>\nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include <begin_vertex>\n\t#include <project_vertex>\n\tgl_Position.z = gl_Position.w;\n}",backgroundCube_frag:"#ifdef ENVMAP_TYPE_CUBE\n\tuniform samplerCube envMap;\n#elif defined( ENVMAP_TYPE_CUBE_UV )\n\tuniform sampler2D envMap;\n#endif\nuniform float flipEnvMap;\nuniform float backgroundBlurriness;\nuniform float backgroundIntensity;\nuniform mat3 backgroundRotation;\nvarying vec3 vWorldDirection;\n#include <cube_uv_reflection_fragment>\nvoid main() {\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 texColor = textureCube( envMap, backgroundRotation * vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 texColor = textureCubeUV( envMap, backgroundRotation * vWorldDirection, backgroundBlurriness );\n\t#else\n\t\tvec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t#endif\n\ttexColor.rgb *= backgroundIntensity;\n\tgl_FragColor = texColor;\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n}",cube_vert:"varying vec3 vWorldDirection;\n#include <common>\nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include <begin_vertex>\n\t#include <project_vertex>\n\tgl_Position.z = gl_Position.w;\n}",cube_frag:"uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldDirection;\nvoid main() {\n\tvec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );\n\tgl_FragColor = texColor;\n\tgl_FragColor.a *= opacity;\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n}",depth_vert:"#include <common>\n#include <batching_pars_vertex>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include <uv_vertex>\n\t#include <batching_vertex>\n\t#include <skinbase_vertex>\n\t#include <morphinstance_vertex>\n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvHighPrecisionZW = gl_Position.zw;\n}",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include <common>\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <alphahash_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include <clipping_planes_fragment>\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <alphahash_fragment>\n\t#include <logdepthbuf_fragment>\n\t#ifdef USE_REVERSEDEPTHBUF\n\t\tfloat fragCoordZ = vHighPrecisionZW[ 0 ] / vHighPrecisionZW[ 1 ];\n\t#else\n\t\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[ 0 ] / vHighPrecisionZW[ 1 ] + 0.5;\n\t#endif\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#elif DEPTH_PACKING == 3202\n\t\tgl_FragColor = vec4( packDepthToRGB( fragCoordZ ), 1.0 );\n\t#elif DEPTH_PACKING == 3203\n\t\tgl_FragColor = vec4( packDepthToRG( fragCoordZ ), 0.0, 1.0 );\n\t#endif\n}",distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include <common>\n#include <batching_pars_vertex>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <batching_vertex>\n\t#include <skinbase_vertex>\n\t#include <morphinstance_vertex>\n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <worldpos_vertex>\n\t#include <clipping_planes_vertex>\n\tvWorldPosition = worldPosition.xyz;\n}",distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include <common>\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <alphahash_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main () {\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include <clipping_planes_fragment>\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <alphahash_fragment>\n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}",equirect_vert:"varying vec3 vWorldDirection;\n#include <common>\nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include <begin_vertex>\n\t#include <project_vertex>\n}",equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include <common>\nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n}",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include <common>\n#include <uv_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include <uv_vertex>\n\t#include <color_vertex>\n\t#include <morphinstance_vertex>\n\t#include <morphcolor_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <fog_vertex>\n}",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include <common>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <fog_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <clipping_planes_fragment>\n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\toutgoingLight = diffuseColor.rgb;\n\t#include <opaque_fragment>\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n}",meshbasic_vert:"#include <common>\n#include <batching_pars_vertex>\n#include <uv_pars_vertex>\n#include <envmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <color_vertex>\n\t#include <morphinstance_vertex>\n\t#include <morphcolor_vertex>\n\t#include <batching_vertex>\n\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\n\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinbase_vertex>\n\t\t#include <skinnormal_vertex>\n\t\t#include <defaultnormal_vertex>\n\t#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <worldpos_vertex>\n\t#include <envmap_vertex>\n\t#include <fog_vertex>\n}",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <common>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <alphahash_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <envmap_common_pars_fragment>\n#include <envmap_pars_fragment>\n#include <fog_pars_fragment>\n#include <specularmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <clipping_planes_fragment>\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <alphahash_fragment>\n\t#include <specularmap_fragment>\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n\t\treflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include <aomap_fragment>\n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include <envmap_fragment>\n\t#include <opaque_fragment>\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}",meshlambert_vert:"#define LAMBERT\nvarying vec3 vViewPosition;\n#include <common>\n#include <batching_pars_vertex>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <envmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <normal_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <color_vertex>\n\t#include <morphinstance_vertex>\n\t#include <morphcolor_vertex>\n\t#include <batching_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <normal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <envmap_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}",meshlambert_frag:"#define LAMBERT\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include <common>\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <alphahash_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <envmap_common_pars_fragment>\n#include <envmap_pars_fragment>\n#include <fog_pars_fragment>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <normal_pars_fragment>\n#include <lights_lambert_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <specularmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <clipping_planes_fragment>\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <alphahash_fragment>\n\t#include <specularmap_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\t#include <emissivemap_fragment>\n\t#include <lights_lambert_fragment>\n\t#include <lights_fragment_begin>\n\t#include <lights_fragment_maps>\n\t#include <lights_fragment_end>\n\t#include <aomap_fragment>\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include <envmap_fragment>\n\t#include <opaque_fragment>\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}",meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#include <common>\n#include <batching_pars_vertex>\n#include <uv_pars_vertex>\n#include <color_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <fog_pars_vertex>\n#include <normal_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <color_vertex>\n\t#include <morphinstance_vertex>\n\t#include <morphcolor_vertex>\n\t#include <batching_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <normal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <fog_vertex>\n\tvViewPosition = - mvPosition.xyz;\n}",meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#include <common>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <alphahash_pars_fragment>\n#include <fog_pars_fragment>\n#include <normal_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <clipping_planes_fragment>\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <alphahash_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t#else\n\t\tvec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\t#include <opaque_fragment>\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}",meshnormal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n\tvarying vec3 vViewPosition;\n#endif\n#include <common>\n#include <batching_pars_vertex>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <normal_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <batching_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphinstance_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <normal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}",meshnormal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n\tvarying vec3 vViewPosition;\n#endif\n#include <packing>\n#include <uv_pars_fragment>\n#include <normal_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\tvec4 diffuseColor = vec4( 0.0, 0.0, 0.0, opacity );\n\t#include <clipping_planes_fragment>\n\t#include <logdepthbuf_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\tgl_FragColor = vec4( packNormalToRGB( normal ), diffuseColor.a );\n\t#ifdef OPAQUE\n\t\tgl_FragColor.a = 1.0;\n\t#endif\n}",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#include <common>\n#include <batching_pars_vertex>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <envmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <normal_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <color_vertex>\n\t#include <morphcolor_vertex>\n\t#include <batching_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphinstance_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <normal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <envmap_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include <common>\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <alphahash_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <envmap_common_pars_fragment>\n#include <envmap_pars_fragment>\n#include <fog_pars_fragment>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <normal_pars_fragment>\n#include <lights_phong_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <specularmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <clipping_planes_fragment>\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <alphahash_fragment>\n\t#include <specularmap_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\t#include <emissivemap_fragment>\n\t#include <lights_phong_fragment>\n\t#include <lights_fragment_begin>\n\t#include <lights_fragment_maps>\n\t#include <lights_fragment_end>\n\t#include <aomap_fragment>\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include <envmap_fragment>\n\t#include <opaque_fragment>\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}",meshphysical_vert:"#define STANDARD\nvarying vec3 vViewPosition;\n#ifdef USE_TRANSMISSION\n\tvarying vec3 vWorldPosition;\n#endif\n#include <common>\n#include <batching_pars_vertex>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <normal_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <color_vertex>\n\t#include <morphinstance_vertex>\n\t#include <morphcolor_vertex>\n\t#include <batching_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <normal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n#ifdef USE_TRANSMISSION\n\tvWorldPosition = worldPosition.xyz;\n#endif\n}",meshphysical_frag:"#define STANDARD\n#ifdef PHYSICAL\n\t#define IOR\n\t#define USE_SPECULAR\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef IOR\n\tuniform float ior;\n#endif\n#ifdef USE_SPECULAR\n\tuniform float specularIntensity;\n\tuniform vec3 specularColor;\n\t#ifdef USE_SPECULAR_COLORMAP\n\t\tuniform sampler2D specularColorMap;\n\t#endif\n\t#ifdef USE_SPECULAR_INTENSITYMAP\n\t\tuniform sampler2D specularIntensityMap;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_DISPERSION\n\tuniform float dispersion;\n#endif\n#ifdef USE_IRIDESCENCE\n\tuniform float iridescence;\n\tuniform float iridescenceIOR;\n\tuniform float iridescenceThicknessMinimum;\n\tuniform float iridescenceThicknessMaximum;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheenColor;\n\tuniform float sheenRoughness;\n\t#ifdef USE_SHEEN_COLORMAP\n\t\tuniform sampler2D sheenColorMap;\n\t#endif\n\t#ifdef USE_SHEEN_ROUGHNESSMAP\n\t\tuniform sampler2D sheenRoughnessMap;\n\t#endif\n#endif\n#ifdef USE_ANISOTROPY\n\tuniform vec2 anisotropyVector;\n\t#ifdef USE_ANISOTROPYMAP\n\t\tuniform sampler2D anisotropyMap;\n\t#endif\n#endif\nvarying vec3 vViewPosition;\n#include <common>\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <alphahash_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <iridescence_fragment>\n#include <cube_uv_reflection_fragment>\n#include <envmap_common_pars_fragment>\n#include <envmap_physical_pars_fragment>\n#include <fog_pars_fragment>\n#include <lights_pars_begin>\n#include <normal_pars_fragment>\n#include <lights_physical_pars_fragment>\n#include <transmission_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <clearcoat_pars_fragment>\n#include <iridescence_pars_fragment>\n#include <roughnessmap_pars_fragment>\n#include <metalnessmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <clipping_planes_fragment>\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <alphahash_fragment>\n\t#include <roughnessmap_fragment>\n\t#include <metalnessmap_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\t#include <clearcoat_normal_fragment_begin>\n\t#include <clearcoat_normal_fragment_maps>\n\t#include <emissivemap_fragment>\n\t#include <lights_physical_fragment>\n\t#include <lights_fragment_begin>\n\t#include <lights_fragment_maps>\n\t#include <lights_fragment_end>\n\t#include <aomap_fragment>\n\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n\t#include <transmission_fragment>\n\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n\t#ifdef USE_SHEEN\n\t\tfloat sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\n\t\toutgoingLight = outgoingLight * sheenEnergyComp + sheenSpecularDirect + sheenSpecularIndirect;\n\t#endif\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNVcc = saturate( dot( geometryClearcoatNormal, geometryViewDir ) );\n\t\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n\t\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + ( clearcoatSpecularDirect + clearcoatSpecularIndirect ) * material.clearcoat;\n\t#endif\n\t#include <opaque_fragment>\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}",meshtoon_vert:"#define TOON\nvarying vec3 vViewPosition;\n#include <common>\n#include <batching_pars_vertex>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <normal_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <color_vertex>\n\t#include <morphinstance_vertex>\n\t#include <morphcolor_vertex>\n\t#include <batching_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <normal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}",meshtoon_frag:"#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include <common>\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <alphahash_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <gradientmap_pars_fragment>\n#include <fog_pars_fragment>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <normal_pars_fragment>\n#include <lights_toon_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <clipping_planes_fragment>\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <alphahash_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\t#include <emissivemap_fragment>\n\t#include <lights_toon_fragment>\n\t#include <lights_fragment_begin>\n\t#include <lights_fragment_maps>\n\t#include <lights_fragment_end>\n\t#include <aomap_fragment>\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include <opaque_fragment>\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}",points_vert:"uniform float size;\nuniform float scale;\n#include <common>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\n#ifdef USE_POINTS_UV\n\tvarying vec2 vUv;\n\tuniform mat3 uvTransform;\n#endif\nvoid main() {\n\t#ifdef USE_POINTS_UV\n\t\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\t#endif\n\t#include <color_vertex>\n\t#include <morphinstance_vertex>\n\t#include <morphcolor_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <project_vertex>\n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <worldpos_vertex>\n\t#include <fog_vertex>\n}",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include <common>\n#include <color_pars_fragment>\n#include <map_particle_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <alphahash_pars_fragment>\n#include <fog_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <clipping_planes_fragment>\n\tvec3 outgoingLight = vec3( 0.0 );\n\t#include <logdepthbuf_fragment>\n\t#include <map_particle_fragment>\n\t#include <color_fragment>\n\t#include <alphatest_fragment>\n\t#include <alphahash_fragment>\n\toutgoingLight = diffuseColor.rgb;\n\t#include <opaque_fragment>\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n}",shadow_vert:"#include <common>\n#include <batching_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <shadowmap_pars_vertex>\nvoid main() {\n\t#include <batching_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphinstance_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}",shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include <common>\n#include <packing>\n#include <fog_pars_fragment>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <logdepthbuf_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <shadowmask_pars_fragment>\nvoid main() {\n\t#include <logdepthbuf_fragment>\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n\t#include <fog_fragment>\n}",sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include <common>\n#include <uv_pars_vertex>\n#include <fog_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\tvec4 mvPosition = modelViewMatrix[ 3 ];\n\tvec2 scale = vec2( length( modelMatrix[ 0 ].xyz ), length( modelMatrix[ 1 ].xyz ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <fog_vertex>\n}",sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include <common>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <alphahash_pars_fragment>\n#include <fog_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <clipping_planes_fragment>\n\tvec3 outgoingLight = vec3( 0.0 );\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <alphahash_fragment>\n\toutgoingLight = diffuseColor.rgb;\n\t#include <opaque_fragment>\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n\t#include <fog_fragment>\n}"},Yt={common:{diffuse:{value:new ut.Q1f(16777215)},opacity:{value:1},map:{value:null},mapTransform:{value:new ut.dwI},alphaMap:{value:null},alphaMapTransform:{value:new ut.dwI},alphaTest:{value:0}},specularmap:{specularMap:{value:null},specularMapTransform:{value:new ut.dwI}},envmap:{envMap:{value:null},envMapRotation:{value:new ut.dwI},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1},aoMapTransform:{value:new ut.dwI}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1},lightMapTransform:{value:new ut.dwI}},bumpmap:{bumpMap:{value:null},bumpMapTransform:{value:new ut.dwI},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalMapTransform:{value:new ut.dwI},normalScale:{value:new ut.I9Y(1,1)}},displacementmap:{displacementMap:{value:null},displacementMapTransform:{value:new ut.dwI},displacementScale:{value:1},displacementBias:{value:0}},emissivemap:{emissiveMap:{value:null},emissiveMapTransform:{value:new ut.dwI}},metalnessmap:{metalnessMap:{value:null},metalnessMapTransform:{value:new ut.dwI}},roughnessmap:{roughnessMap:{value:null},roughnessMapTransform:{value:new ut.dwI}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new ut.Q1f(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotShadowMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new ut.Q1f(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaMapTransform:{value:new ut.dwI},alphaTest:{value:0},uvTransform:{value:new ut.dwI}},sprite:{diffuse:{value:new ut.Q1f(16777215)},opacity:{value:1},center:{value:new ut.I9Y(.5,.5)},rotation:{value:0},map:{value:null},mapTransform:{value:new ut.dwI},alphaMap:{value:null},alphaMapTransform:{value:new ut.dwI},alphaTest:{value:0}}},Xt={basic:{uniforms:(0,ut.Iit)([Yt.common,Yt.specularmap,Yt.envmap,Yt.aomap,Yt.lightmap,Yt.fog]),vertexShader:qt.meshbasic_vert,fragmentShader:qt.meshbasic_frag},lambert:{uniforms:(0,ut.Iit)([Yt.common,Yt.specularmap,Yt.envmap,Yt.aomap,Yt.lightmap,Yt.emissivemap,Yt.bumpmap,Yt.normalmap,Yt.displacementmap,Yt.fog,Yt.lights,{emissive:{value:new ut.Q1f(0)}}]),vertexShader:qt.meshlambert_vert,fragmentShader:qt.meshlambert_frag},phong:{uniforms:(0,ut.Iit)([Yt.common,Yt.specularmap,Yt.envmap,Yt.aomap,Yt.lightmap,Yt.emissivemap,Yt.bumpmap,Yt.normalmap,Yt.displacementmap,Yt.fog,Yt.lights,{emissive:{value:new ut.Q1f(0)},specular:{value:new ut.Q1f(1118481)},shininess:{value:30}}]),vertexShader:qt.meshphong_vert,fragmentShader:qt.meshphong_frag},standard:{uniforms:(0,ut.Iit)([Yt.common,Yt.envmap,Yt.aomap,Yt.lightmap,Yt.emissivemap,Yt.bumpmap,Yt.normalmap,Yt.displacementmap,Yt.roughnessmap,Yt.metalnessmap,Yt.fog,Yt.lights,{emissive:{value:new ut.Q1f(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:qt.meshphysical_vert,fragmentShader:qt.meshphysical_frag},toon:{uniforms:(0,ut.Iit)([Yt.common,Yt.aomap,Yt.lightmap,Yt.emissivemap,Yt.bumpmap,Yt.normalmap,Yt.displacementmap,Yt.gradientmap,Yt.fog,Yt.lights,{emissive:{value:new ut.Q1f(0)}}]),vertexShader:qt.meshtoon_vert,fragmentShader:qt.meshtoon_frag},matcap:{uniforms:(0,ut.Iit)([Yt.common,Yt.bumpmap,Yt.normalmap,Yt.displacementmap,Yt.fog,{matcap:{value:null}}]),vertexShader:qt.meshmatcap_vert,fragmentShader:qt.meshmatcap_frag},points:{uniforms:(0,ut.Iit)([Yt.points,Yt.fog]),vertexShader:qt.points_vert,fragmentShader:qt.points_frag},dashed:{uniforms:(0,ut.Iit)([Yt.common,Yt.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:qt.linedashed_vert,fragmentShader:qt.linedashed_frag},depth:{uniforms:(0,ut.Iit)([Yt.common,Yt.displacementmap]),vertexShader:qt.depth_vert,fragmentShader:qt.depth_frag},normal:{uniforms:(0,ut.Iit)([Yt.common,Yt.bumpmap,Yt.normalmap,Yt.displacementmap,{opacity:{value:1}}]),vertexShader:qt.meshnormal_vert,fragmentShader:qt.meshnormal_frag},sprite:{uniforms:(0,ut.Iit)([Yt.sprite,Yt.fog]),vertexShader:qt.sprite_vert,fragmentShader:qt.sprite_frag},background:{uniforms:{uvTransform:{value:new ut.dwI},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:qt.background_vert,fragmentShader:qt.background_frag},backgroundCube:{uniforms:{envMap:{value:null},flipEnvMap:{value:-1},backgroundBlurriness:{value:0},backgroundIntensity:{value:1},backgroundRotation:{value:new ut.dwI}},vertexShader:qt.backgroundCube_vert,fragmentShader:qt.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:qt.cube_vert,fragmentShader:qt.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:qt.equirect_vert,fragmentShader:qt.equirect_frag},distanceRGBA:{uniforms:(0,ut.Iit)([Yt.common,Yt.displacementmap,{referencePosition:{value:new ut.Pq0},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:qt.distanceRGBA_vert,fragmentShader:qt.distanceRGBA_frag},shadow:{uniforms:(0,ut.Iit)([Yt.lights,Yt.fog,{color:{value:new ut.Q1f(0)},opacity:{value:1}}]),vertexShader:qt.shadow_vert,fragmentShader:qt.shadow_frag}};Xt.physical={uniforms:(0,ut.Iit)([Xt.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatMapTransform:{value:new ut.dwI},clearcoatNormalMap:{value:null},clearcoatNormalMapTransform:{value:new ut.dwI},clearcoatNormalScale:{value:new ut.I9Y(1,1)},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatRoughnessMapTransform:{value:new ut.dwI},dispersion:{value:0},iridescence:{value:0},iridescenceMap:{value:null},iridescenceMapTransform:{value:new ut.dwI},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},iridescenceThicknessMapTransform:{value:new ut.dwI},sheen:{value:0},sheenColor:{value:new ut.Q1f(0)},sheenColorMap:{value:null},sheenColorMapTransform:{value:new ut.dwI},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},sheenRoughnessMapTransform:{value:new ut.dwI},transmission:{value:0},transmissionMap:{value:null},transmissionMapTransform:{value:new ut.dwI},transmissionSamplerSize:{value:new ut.I9Y},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},thicknessMapTransform:{value:new ut.dwI},attenuationDistance:{value:0},attenuationColor:{value:new ut.Q1f(0)},specularColor:{value:new ut.Q1f(1,1,1)},specularColorMap:{value:null},specularColorMapTransform:{value:new ut.dwI},specularIntensity:{value:1},specularIntensityMap:{value:null},specularIntensityMapTransform:{value:new ut.dwI},anisotropyVector:{value:new ut.I9Y},anisotropyMap:{value:null},anisotropyMapTransform:{value:new ut.dwI}}]),vertexShader:qt.meshphysical_vert,fragmentShader:qt.meshphysical_frag};const ys={r:0,b:0,g:0},Ec=new ut.O9p,lu=new ut.kn4;function WebGLBackground(ae,ue,nt,qt,Yt,uu,_u){const vu=new ut.Q1f(0);let wu,Hu,qu=!0===uu?0:1,Ju=null,_h=0,ed=null;function getBackground(ae){let ut=!0===ae.isScene?ae.background:null;if(ut&&ut.isTexture){ut=(ae.backgroundBlurriness>0?nt:ue).get(ut)}return ut}function setClear(ue,nt){ue.getRGB(ys,(0,ut._Ut)(ae)),qt.buffers.color.setClear(ys.r,ys.g,ys.b,nt,_u)}return{getClearColor:function(){return vu},setClearColor:function(ae,ue){void 0===ue&&(ue=1),vu.set(ae),qu=ue,setClear(vu,qu)},getClearAlpha:function(){return qu},setClearAlpha:function(ae){qu=ae,setClear(vu,qu)},render:function(ue){let nt=!1;const ut=getBackground(ue);null===ut?setClear(vu,qu):ut&&ut.isColor&&(setClear(ut,1),nt=!0);const Yt=ae.xr.getEnvironmentBlendMode();"additive"===Yt?qt.buffers.color.setClear(0,0,0,1,_u):"alpha-blend"===Yt&&qt.buffers.color.setClear(0,0,0,0,_u),(ae.autoClear||nt)&&(qt.buffers.depth.setTest(!0),qt.buffers.depth.setMask(!0),qt.buffers.color.setMask(!0),ae.clear(ae.autoClearColor,ae.autoClearDepth,ae.autoClearStencil))},addToRenderList:function(ue,nt){const qt=getBackground(nt);qt&&(qt.isCubeTexture||qt.mapping===ut.Om)?(void 0===Hu&&(Hu=new ut.eaF(new ut.iNn(1,1,1),new ut.BKk({name:"BackgroundCubeMaterial",uniforms:(0,ut.lxW)(Xt.backgroundCube.uniforms),vertexShader:Xt.backgroundCube.vertexShader,fragmentShader:Xt.backgroundCube.fragmentShader,side:ut.hsX,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),Hu.geometry.deleteAttribute("normal"),Hu.geometry.deleteAttribute("uv"),Hu.onBeforeRender=function(ae,ue,nt){this.matrixWorld.copyPosition(nt.matrixWorld)},Object.defineProperty(Hu.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),Yt.update(Hu)),Ec.copy(nt.backgroundRotation),Ec.x*=-1,Ec.y*=-1,Ec.z*=-1,qt.isCubeTexture&&!1===qt.isRenderTargetTexture&&(Ec.y*=-1,Ec.z*=-1),Hu.material.uniforms.envMap.value=qt,Hu.material.uniforms.flipEnvMap.value=qt.isCubeTexture&&!1===qt.isRenderTargetTexture?-1:1,Hu.material.uniforms.backgroundBlurriness.value=nt.backgroundBlurriness,Hu.material.uniforms.backgroundIntensity.value=nt.backgroundIntensity,Hu.material.uniforms.backgroundRotation.value.setFromMatrix4(lu.makeRotationFromEuler(Ec)),Hu.material.toneMapped=ut.ppV.getTransfer(qt.colorSpace)!==ut.KLL,Ju===qt&&_h===qt.version&&ed===ae.toneMapping||(Hu.material.needsUpdate=!0,Ju=qt,_h=qt.version,ed=ae.toneMapping),Hu.layers.enableAll(),ue.unshift(Hu,Hu.geometry,Hu.material,0,0,null)):qt&&qt.isTexture&&(void 0===wu&&(wu=new ut.eaF(new ut.bdM(2,2),new ut.BKk({name:"BackgroundMaterial",uniforms:(0,ut.lxW)(Xt.background.uniforms),vertexShader:Xt.background.vertexShader,fragmentShader:Xt.background.fragmentShader,side:ut.hB5,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),wu.geometry.deleteAttribute("normal"),Object.defineProperty(wu.material,"map",{get:function(){return this.uniforms.t2D.value}}),Yt.update(wu)),wu.material.uniforms.t2D.value=qt,wu.material.uniforms.backgroundIntensity.value=nt.backgroundIntensity,wu.material.toneMapped=ut.ppV.getTransfer(qt.colorSpace)!==ut.KLL,!0===qt.matrixAutoUpdate&&qt.updateMatrix(),wu.material.uniforms.uvTransform.value.copy(qt.matrix),Ju===qt&&_h===qt.version&&ed===ae.toneMapping||(wu.material.needsUpdate=!0,Ju=qt,_h=qt.version,ed=ae.toneMapping),wu.layers.enableAll(),ue.unshift(wu,wu.geometry,wu.material,0,0,null))},dispose:function(){void 0!==Hu&&(Hu.geometry.dispose(),Hu.material.dispose(),Hu=void 0),void 0!==wu&&(wu.geometry.dispose(),wu.material.dispose(),wu=void 0)}}}function WebGLBindingStates(ae,ue){const nt=ae.getParameter(ae.MAX_VERTEX_ATTRIBS),qt={},Yt=createBindingState(null);let Xt=Yt,ys=!1;function bindVertexArrayObject(ue){return ae.bindVertexArray(ue)}function deleteVertexArrayObject(ue){return ae.deleteVertexArray(ue)}function createBindingState(ae){const ue=[],ut=[],qt=[];for(let Yt=0;Yt<nt;Yt++)ue[Yt]=0,ut[Yt]=0,qt[Yt]=0;return{geometry:null,program:null,wireframe:!1,newAttributes:ue,enabledAttributes:ut,attributeDivisors:qt,object:ae,attributes:{},index:null}}function initAttributes(){const ae=Xt.newAttributes;for(let ue=0,nt=ae.length;ue<nt;ue++)ae[ue]=0}function enableAttribute(ae){enableAttributeAndDivisor(ae,0)}function enableAttributeAndDivisor(ue,nt){const ut=Xt.newAttributes,qt=Xt.enabledAttributes,Yt=Xt.attributeDivisors;ut[ue]=1,0===qt[ue]&&(ae.enableVertexAttribArray(ue),qt[ue]=1),Yt[ue]!==nt&&(ae.vertexAttribDivisor(ue,nt),Yt[ue]=nt)}function disableUnusedAttributes(){const ue=Xt.newAttributes,nt=Xt.enabledAttributes;for(let ut=0,qt=nt.length;ut<qt;ut++)nt[ut]!==ue[ut]&&(ae.disableVertexAttribArray(ut),nt[ut]=0)}function vertexAttribPointer(ue,nt,ut,qt,Yt,Xt,ys){!0===ys?ae.vertexAttribIPointer(ue,nt,ut,Yt,Xt):ae.vertexAttribPointer(ue,nt,ut,qt,Yt,Xt)}function reset(){resetDefaultState(),ys=!0,Xt!==Yt&&(Xt=Yt,bindVertexArrayObject(Xt.object))}function resetDefaultState(){Yt.geometry=null,Yt.program=null,Yt.wireframe=!1}return{setup:function(nt,Yt,Ec,lu,uu){let _u=!1;const vu=function(ue,nt,ut){const Yt=!0===ut.wireframe;let Xt=qt[ue.id];void 0===Xt&&(Xt={},qt[ue.id]=Xt);let ys=Xt[nt.id];void 0===ys&&(ys={},Xt[nt.id]=ys);let Ec=ys[Yt];void 0===Ec&&(Ec=createBindingState(ae.createVertexArray()),ys[Yt]=Ec);return Ec}(lu,Ec,Yt);Xt!==vu&&(Xt=vu,bindVertexArrayObject(Xt.object)),_u=function(ae,ue,nt,ut){const qt=Xt.attributes,Yt=ue.attributes;let ys=0;const Ec=nt.getAttributes();for(const Xt in Ec){if(Ec[Xt].location>=0){const ue=qt[Xt];let nt=Yt[Xt];if(void 0===nt&&("instanceMatrix"===Xt&&ae.instanceMatrix&&(nt=ae.instanceMatrix),"instanceColor"===Xt&&ae.instanceColor&&(nt=ae.instanceColor)),void 0===ue)return!0;if(ue.attribute!==nt)return!0;if(nt&&ue.data!==nt.data)return!0;ys++}}return Xt.attributesNum!==ys||Xt.index!==ut}(nt,lu,Ec,uu),_u&&function(ae,ue,nt,ut){const qt={},Yt=ue.attributes;let ys=0;const Ec=nt.getAttributes();for(const Xt in Ec){if(Ec[Xt].location>=0){let ue=Yt[Xt];void 0===ue&&("instanceMatrix"===Xt&&ae.instanceMatrix&&(ue=ae.instanceMatrix),"instanceColor"===Xt&&ae.instanceColor&&(ue=ae.instanceColor));const nt={};nt.attribute=ue,ue&&ue.data&&(nt.data=ue.data),qt[Xt]=nt,ys++}}Xt.attributes=qt,Xt.attributesNum=ys,Xt.index=ut}(nt,lu,Ec,uu),null!==uu&&ue.update(uu,ae.ELEMENT_ARRAY_BUFFER),(_u||ys)&&(ys=!1,function(nt,qt,Yt,Xt){initAttributes();const ys=Xt.attributes,Ec=Yt.getAttributes(),lu=qt.defaultAttributeValues;for(const uu in Ec){const qt=Ec[uu];if(qt.location>=0){let Yt=ys[uu];if(void 0===Yt&&("instanceMatrix"===uu&&nt.instanceMatrix&&(Yt=nt.instanceMatrix),"instanceColor"===uu&&nt.instanceColor&&(Yt=nt.instanceColor)),void 0!==Yt){const ys=Yt.normalized,Ec=Yt.itemSize,lu=ue.get(Yt);if(void 0===lu)continue;const uu=lu.buffer,_u=lu.type,vu=lu.bytesPerElement,wu=_u===ae.INT||_u===ae.UNSIGNED_INT||Yt.gpuType===ut.Yuy;if(Yt.isInterleavedBufferAttribute){const ue=Yt.data,ut=ue.stride,lu=Yt.offset;if(ue.isInstancedInterleavedBuffer){for(let ae=0;ae<qt.locationSize;ae++)enableAttributeAndDivisor(qt.location+ae,ue.meshPerAttribute);!0!==nt.isInstancedMesh&&void 0===Xt._maxInstanceCount&&(Xt._maxInstanceCount=ue.meshPerAttribute*ue.count)}else for(let ae=0;ae<qt.locationSize;ae++)enableAttribute(qt.location+ae);ae.bindBuffer(ae.ARRAY_BUFFER,uu);for(let ae=0;ae<qt.locationSize;ae++)vertexAttribPointer(qt.location+ae,Ec/qt.locationSize,_u,ys,ut*vu,(lu+Ec/qt.locationSize*ae)*vu,wu)}else{if(Yt.isInstancedBufferAttribute){for(let ae=0;ae<qt.locationSize;ae++)enableAttributeAndDivisor(qt.location+ae,Yt.meshPerAttribute);!0!==nt.isInstancedMesh&&void 0===Xt._maxInstanceCount&&(Xt._maxInstanceCount=Yt.meshPerAttribute*Yt.count)}else for(let ae=0;ae<qt.locationSize;ae++)enableAttribute(qt.location+ae);ae.bindBuffer(ae.ARRAY_BUFFER,uu);for(let ae=0;ae<qt.locationSize;ae++)vertexAttribPointer(qt.location+ae,Ec/qt.locationSize,_u,ys,Ec*vu,Ec/qt.locationSize*ae*vu,wu)}}else if(void 0!==lu){const ue=lu[uu];if(void 0!==ue)switch(ue.length){case 2:ae.vertexAttrib2fv(qt.location,ue);break;case 3:ae.vertexAttrib3fv(qt.location,ue);break;case 4:ae.vertexAttrib4fv(qt.location,ue);break;default:ae.vertexAttrib1fv(qt.location,ue)}}}}disableUnusedAttributes()}(nt,Yt,Ec,lu),null!==uu&&ae.bindBuffer(ae.ELEMENT_ARRAY_BUFFER,ue.get(uu).buffer))},reset:reset,resetDefaultState:resetDefaultState,dispose:function(){reset();for(const ae in qt){const ue=qt[ae];for(const ae in ue){const nt=ue[ae];for(const ae in nt)deleteVertexArrayObject(nt[ae].object),delete nt[ae];delete ue[ae]}delete qt[ae]}},releaseStatesOfGeometry:function(ae){if(void 0===qt[ae.id])return;const ue=qt[ae.id];for(const nt in ue){const ae=ue[nt];for(const ue in ae)deleteVertexArrayObject(ae[ue].object),delete ae[ue];delete ue[nt]}delete qt[ae.id]},releaseStatesOfProgram:function(ae){for(const ue in qt){const nt=qt[ue];if(void 0===nt[ae.id])continue;const ut=nt[ae.id];for(const ae in ut)deleteVertexArrayObject(ut[ae].object),delete ut[ae];delete nt[ae.id]}},initAttributes:initAttributes,enableAttribute:enableAttribute,disableUnusedAttributes:disableUnusedAttributes}}function WebGLBufferRenderer(ae,ue,nt){let ut;function renderInstances(ue,qt,Yt){0!==Yt&&(ae.drawArraysInstanced(ut,ue,qt,Yt),nt.update(qt,ut,Yt))}this.setMode=function(ae){ut=ae},this.render=function(ue,qt){ae.drawArrays(ut,ue,qt),nt.update(qt,ut,1)},this.renderInstances=renderInstances,this.renderMultiDraw=function(ae,qt,Yt){if(0===Yt)return;ue.get("WEBGL_multi_draw").multiDrawArraysWEBGL(ut,ae,0,qt,0,Yt);let Xt=0;for(let ue=0;ue<Yt;ue++)Xt+=qt[ue];nt.update(Xt,ut,1)},this.renderMultiDrawInstances=function(ae,qt,Yt,Xt){if(0===Yt)return;const ys=ue.get("WEBGL_multi_draw");if(null===ys)for(let ue=0;ue<ae.length;ue++)renderInstances(ae[ue],qt[ue],Xt[ue]);else{ys.multiDrawArraysInstancedWEBGL(ut,ae,0,qt,0,Xt,0,Yt);let ue=0;for(let ae=0;ae<Yt;ae++)ue+=qt[ae]*Xt[ae];nt.update(ue,ut,1)}}}function WebGLCapabilities(ae,ue,nt,qt){let Yt;function getMaxPrecision(ue){if("highp"===ue){if(ae.getShaderPrecisionFormat(ae.VERTEX_SHADER,ae.HIGH_FLOAT).precision>0&&ae.getShaderPrecisionFormat(ae.FRAGMENT_SHADER,ae.HIGH_FLOAT).precision>0)return"highp";ue="mediump"}return"mediump"===ue&&ae.getShaderPrecisionFormat(ae.VERTEX_SHADER,ae.MEDIUM_FLOAT).precision>0&&ae.getShaderPrecisionFormat(ae.FRAGMENT_SHADER,ae.MEDIUM_FLOAT).precision>0?"mediump":"lowp"}let Xt=void 0!==nt.precision?nt.precision:"highp";const ys=getMaxPrecision(Xt);ys!==Xt&&(console.warn("THREE.WebGLRenderer:",Xt,"not supported, using",ys,"instead."),Xt=ys);const Ec=!0===nt.logarithmicDepthBuffer,lu=!0===nt.reversedDepthBuffer&&ue.has("EXT_clip_control"),uu=ae.getParameter(ae.MAX_TEXTURE_IMAGE_UNITS),_u=ae.getParameter(ae.MAX_VERTEX_TEXTURE_IMAGE_UNITS);return{isWebGL2:!0,getMaxAnisotropy:function(){if(void 0!==Yt)return Yt;if(!0===ue.has("EXT_texture_filter_anisotropic")){const nt=ue.get("EXT_texture_filter_anisotropic");Yt=ae.getParameter(nt.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else Yt=0;return Yt},getMaxPrecision:getMaxPrecision,textureFormatReadable:function(ue){return ue===ut.GWd||qt.convert(ue)===ae.getParameter(ae.IMPLEMENTATION_COLOR_READ_FORMAT)},textureTypeReadable:function(nt){const Yt=nt===ut.ix0&&(ue.has("EXT_color_buffer_half_float")||ue.has("EXT_color_buffer_float"));return!(nt!==ut.OUM&&qt.convert(nt)!==ae.getParameter(ae.IMPLEMENTATION_COLOR_READ_TYPE)&&nt!==ut.RQf&&!Yt)},precision:Xt,logarithmicDepthBuffer:Ec,reversedDepthBuffer:lu,maxTextures:uu,maxVertexTextures:_u,maxTextureSize:ae.getParameter(ae.MAX_TEXTURE_SIZE),maxCubemapSize:ae.getParameter(ae.MAX_CUBE_MAP_TEXTURE_SIZE),maxAttributes:ae.getParameter(ae.MAX_VERTEX_ATTRIBS),maxVertexUniforms:ae.getParameter(ae.MAX_VERTEX_UNIFORM_VECTORS),maxVaryings:ae.getParameter(ae.MAX_VARYING_VECTORS),maxFragmentUniforms:ae.getParameter(ae.MAX_FRAGMENT_UNIFORM_VECTORS),vertexTextures:_u>0,maxSamples:ae.getParameter(ae.MAX_SAMPLES)}}function WebGLClipping(ae){const ue=this;let nt=null,qt=0,Yt=!1,Xt=!1;const ys=new ut.Zcv,Ec=new ut.dwI,lu={value:null,needsUpdate:!1};function projectPlanes(ae,nt,ut,qt){const Yt=null!==ae?ae.length:0;let Xt=null;if(0!==Yt){if(Xt=lu.value,!0!==qt||null===Xt){const ue=ut+4*Yt,qt=nt.matrixWorldInverse;Ec.getNormalMatrix(qt),(null===Xt||Xt.length<ue)&&(Xt=new Float32Array(ue));for(let nt=0,lu=ut;nt!==Yt;++nt,lu+=4)ys.copy(ae[nt]).applyMatrix4(qt,Ec),ys.normal.toArray(Xt,lu),Xt[lu+3]=ys.constant}lu.value=Xt,lu.needsUpdate=!0}return ue.numPlanes=Yt,ue.numIntersection=0,Xt}this.uniform=lu,this.numPlanes=0,this.numIntersection=0,this.init=function(ae,ue){const nt=0!==ae.length||ue||0!==qt||Yt;return Yt=ue,qt=ae.length,nt},this.beginShadows=function(){Xt=!0,projectPlanes(null)},this.endShadows=function(){Xt=!1},this.setGlobalState=function(ae,ue){nt=projectPlanes(ae,ue,0)},this.setState=function(ut,ys,Ec){const uu=ut.clippingPlanes,_u=ut.clipIntersection,vu=ut.clipShadows,wu=ae.get(ut);if(!Yt||null===uu||0===uu.length||Xt&&!vu)Xt?projectPlanes(null):function(){lu.value!==nt&&(lu.value=nt,lu.needsUpdate=qt>0);ue.numPlanes=qt,ue.numIntersection=0}();else{const ae=Xt?0:qt,ue=4*ae;let ut=wu.clippingState||null;lu.value=ut,ut=projectPlanes(uu,ys,ue,Ec);for(let qt=0;qt!==ue;++qt)ut[qt]=nt[qt];wu.clippingState=ut,this.numIntersection=_u?this.numPlanes:0,this.numPlanes+=ae}}}function WebGLCubeMaps(ae){let ue=new WeakMap;function mapTextureMapping(ae,ue){return ue===ut.wfO?ae.mapping=ut.hy7:ue===ut.uV5&&(ae.mapping=ut.xFO),ae}function onTextureDispose(ae){const nt=ae.target;nt.removeEventListener("dispose",onTextureDispose);const ut=ue.get(nt);void 0!==ut&&(ue.delete(nt),ut.dispose())}return{get:function(nt){if(nt&&nt.isTexture){const qt=nt.mapping;if(qt===ut.wfO||qt===ut.uV5){if(ue.has(nt)){return mapTextureMapping(ue.get(nt).texture,nt.mapping)}{const qt=nt.image;if(qt&&qt.height>0){const Yt=new ut.o6l(qt.height);return Yt.fromEquirectangularTexture(ae,nt),ue.set(nt,Yt),nt.addEventListener("dispose",onTextureDispose),mapTextureMapping(Yt.texture,nt.mapping)}return null}}}return nt},dispose:function(){ue=new WeakMap}}}const uu=[.125,.215,.35,.446,.526,.582],_u=20,vu=new ut.qUd,wu=new ut.Q1f;let Hu=null,qu=0,Ju=0,_h=!1;const ed=(1+Math.sqrt(5))/2,td=1/ed,id=[new ut.Pq0(-ed,td,0),new ut.Pq0(ed,td,0),new ut.Pq0(-td,0,ed),new ut.Pq0(td,0,ed),new ut.Pq0(0,ed,-td),new ut.Pq0(0,ed,td),new ut.Pq0(-1,1,-1),new ut.Pq0(1,1,-1),new ut.Pq0(-1,1,1),new ut.Pq0(1,1,1)],nd=new ut.Pq0;class PMREMGenerator{constructor(ae){this._renderer=ae,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._lodPlanes=[],this._sizeLods=[],this._sigmas=[],this._blurMaterial=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._compileMaterial(this._blurMaterial)}fromScene(ae,ue,nt,ut,qt){void 0===ue&&(ue=0),void 0===nt&&(nt=.1),void 0===ut&&(ut=100),void 0===qt&&(qt={});const{size:Yt=256,position:Xt=nd}=qt;Hu=this._renderer.getRenderTarget(),qu=this._renderer.getActiveCubeFace(),Ju=this._renderer.getActiveMipmapLevel(),_h=this._renderer.xr.enabled,this._renderer.xr.enabled=!1,this._setSize(Yt);const ys=this._allocateTargets();return ys.depthBuffer=!0,this._sceneToCubeUV(ae,nt,ut,ys,Xt),ue>0&&this._blur(ys,0,0,ue),this._applyPMREM(ys),this._cleanup(ys),ys}fromEquirectangular(ae,ue){return void 0===ue&&(ue=null),this._fromTexture(ae,ue)}fromCubemap(ae,ue){return void 0===ue&&(ue=null),this._fromTexture(ae,ue)}compileCubemapShader(){null===this._cubemapMaterial&&(this._cubemapMaterial=_getCubemapMaterial(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){null===this._equirectMaterial&&(this._equirectMaterial=_getEquirectMaterial(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),null!==this._cubemapMaterial&&this._cubemapMaterial.dispose(),null!==this._equirectMaterial&&this._equirectMaterial.dispose()}_setSize(ae){this._lodMax=Math.floor(Math.log2(ae)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){null!==this._blurMaterial&&this._blurMaterial.dispose(),null!==this._pingPongRenderTarget&&this._pingPongRenderTarget.dispose();for(let ae=0;ae<this._lodPlanes.length;ae++)this._lodPlanes[ae].dispose()}_cleanup(ae){this._renderer.setRenderTarget(Hu,qu,Ju),this._renderer.xr.enabled=_h,ae.scissorTest=!1,_setViewport(ae,0,0,ae.width,ae.height)}_fromTexture(ae,ue){ae.mapping===ut.hy7||ae.mapping===ut.xFO?this._setSize(0===ae.image.length?16:ae.image[0].width||ae.image[0].image.width):this._setSize(ae.image.width/4),Hu=this._renderer.getRenderTarget(),qu=this._renderer.getActiveCubeFace(),Ju=this._renderer.getActiveMipmapLevel(),_h=this._renderer.xr.enabled,this._renderer.xr.enabled=!1;const nt=ue||this._allocateTargets();return this._textureToCubeUV(ae,nt),this._applyPMREM(nt),this._cleanup(nt),nt}_allocateTargets(){const ae=3*Math.max(this._cubeSize,112),ue=4*this._cubeSize,nt={magFilter:ut.k6q,minFilter:ut.k6q,generateMipmaps:!1,type:ut.ix0,format:ut.GWd,colorSpace:ut.Zr2,depthBuffer:!1},qt=_createRenderTarget(ae,ue,nt);if(null===this._pingPongRenderTarget||this._pingPongRenderTarget.width!==ae||this._pingPongRenderTarget.height!==ue){null!==this._pingPongRenderTarget&&this._dispose(),this._pingPongRenderTarget=_createRenderTarget(ae,ue,nt);const{_lodMax:qt}=this;({sizeLods:this._sizeLods,lodPlanes:this._lodPlanes,sigmas:this._sigmas}=function(ae){const ue=[],nt=[],qt=[];let Yt=ae;const Xt=ae-4+1+uu.length;for(let ys=0;ys<Xt;ys++){const Xt=Math.pow(2,Yt);nt.push(Xt);let Ec=1/Xt;ys>ae-4?Ec=uu[ys-ae+4-1]:0===ys&&(Ec=0),qt.push(Ec);const lu=1/(Xt-2),_u=-lu,vu=1+lu,wu=[_u,_u,vu,_u,vu,vu,_u,_u,vu,vu,_u,vu],Hu=6,qu=6,Ju=3,_h=2,ed=1,td=new Float32Array(Ju*qu*Hu),id=new Float32Array(_h*qu*Hu),nd=new Float32Array(ed*qu*Hu);for(let ae=0;ae<Hu;ae++){const ue=ae%3*2/3-1,nt=ae>2?0:-1,ut=[ue,nt,0,ue+2/3,nt,0,ue+2/3,nt+1,0,ue,nt,0,ue+2/3,nt+1,0,ue,nt+1,0];td.set(ut,Ju*qu*ae),id.set(wu,_h*qu*ae);const qt=[ae,ae,ae,ae,ae,ae];nd.set(qt,ed*qu*ae)}const rd=new ut.LoY;rd.setAttribute("position",new ut.THS(td,Ju)),rd.setAttribute("uv",new ut.THS(id,_h)),rd.setAttribute("faceIndex",new ut.THS(nd,ed)),ue.push(rd),Yt>4&&Yt--}return{lodPlanes:ue,sizeLods:nt,sigmas:qt}}(qt)),this._blurMaterial=function(ae,ue,nt){const qt=new Float32Array(_u),Yt=new ut.Pq0(0,1,0),Xt=new ut.BKk({name:"SphericalGaussianBlur",defines:{n:_u,CUBEUV_TEXEL_WIDTH:1/ue,CUBEUV_TEXEL_HEIGHT:1/nt,CUBEUV_MAX_MIP:`${ae}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:qt},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:Yt}},vertexShader:_getCommonVertexShader(),fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform int samples;\n\t\t\tuniform float weights[ n ];\n\t\t\tuniform bool latitudinal;\n\t\t\tuniform float dTheta;\n\t\t\tuniform float mipInt;\n\t\t\tuniform vec3 poleAxis;\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include <cube_uv_reflection_fragment>\n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t",blending:ut.XIg,depthTest:!1,depthWrite:!1});return Xt}(qt,ae,ue)}return qt}_compileMaterial(ae){const ue=new ut.eaF(this._lodPlanes[0],ae);this._renderer.compile(ue,vu)}_sceneToCubeUV(ae,ue,nt,qt,Yt){const Xt=new ut.ubm(90,1,ue,nt),ys=[1,-1,1,1,1,1],Ec=[1,1,1,-1,-1,-1],lu=this._renderer,uu=lu.autoClear,_u=lu.toneMapping;lu.getClearColor(wu),lu.toneMapping=ut.y_p,lu.autoClear=!1;lu.state.buffers.depth.getReversed()&&(lu.setRenderTarget(qt),lu.clearDepth(),lu.setRenderTarget(null));const vu=new ut.V9B({name:"PMREM.Background",side:ut.hsX,depthWrite:!1,depthTest:!1}),Hu=new ut.eaF(new ut.iNn,vu);let qu=!1;const Ju=ae.background;Ju?Ju.isColor&&(vu.color.copy(Ju),ae.background=null,qu=!0):(vu.color.copy(wu),qu=!0);for(let ut=0;ut<6;ut++){const ue=ut%3;0===ue?(Xt.up.set(0,ys[ut],0),Xt.position.set(Yt.x,Yt.y,Yt.z),Xt.lookAt(Yt.x+Ec[ut],Yt.y,Yt.z)):1===ue?(Xt.up.set(0,0,ys[ut]),Xt.position.set(Yt.x,Yt.y,Yt.z),Xt.lookAt(Yt.x,Yt.y+Ec[ut],Yt.z)):(Xt.up.set(0,ys[ut],0),Xt.position.set(Yt.x,Yt.y,Yt.z),Xt.lookAt(Yt.x,Yt.y,Yt.z+Ec[ut]));const nt=this._cubeSize;_setViewport(qt,ue*nt,ut>2?nt:0,nt,nt),lu.setRenderTarget(qt),qu&&lu.render(Hu,Xt),lu.render(ae,Xt)}Hu.geometry.dispose(),Hu.material.dispose(),lu.toneMapping=_u,lu.autoClear=uu,ae.background=Ju}_textureToCubeUV(ae,ue){const nt=this._renderer,qt=ae.mapping===ut.hy7||ae.mapping===ut.xFO;qt?(null===this._cubemapMaterial&&(this._cubemapMaterial=_getCubemapMaterial()),this._cubemapMaterial.uniforms.flipEnvMap.value=!1===ae.isRenderTargetTexture?-1:1):null===this._equirectMaterial&&(this._equirectMaterial=_getEquirectMaterial());const Yt=qt?this._cubemapMaterial:this._equirectMaterial,Xt=new ut.eaF(this._lodPlanes[0],Yt);Yt.uniforms.envMap.value=ae;const ys=this._cubeSize;_setViewport(ue,0,0,3*ys,2*ys),nt.setRenderTarget(ue),nt.render(Xt,vu)}_applyPMREM(ae){const ue=this._renderer,nt=ue.autoClear;ue.autoClear=!1;const ut=this._lodPlanes.length;for(let qt=1;qt<ut;qt++){const ue=Math.sqrt(this._sigmas[qt]*this._sigmas[qt]-this._sigmas[qt-1]*this._sigmas[qt-1]),nt=id[(ut-qt-1)%id.length];this._blur(ae,qt-1,qt,ue,nt)}ue.autoClear=nt}_blur(ae,ue,nt,ut,qt){const Yt=this._pingPongRenderTarget;this._halfBlur(ae,Yt,ue,nt,ut,"latitudinal",qt),this._halfBlur(Yt,ae,nt,nt,ut,"longitudinal",qt)}_halfBlur(ae,ue,nt,qt,Yt,Xt,ys){const Ec=this._renderer,lu=this._blurMaterial;"latitudinal"!==Xt&&"longitudinal"!==Xt&&console.error("blur direction must be either latitudinal or longitudinal!");const uu=new ut.eaF(this._lodPlanes[qt],lu),wu=lu.uniforms,Hu=this._sizeLods[nt]-1,qu=isFinite(Yt)?Math.PI/(2*Hu):2*Math.PI/39,Ju=Yt/qu,_h=isFinite(Yt)?1+Math.floor(3*Ju):_u;_h>_u&&console.warn(`sigmaRadians, ${Yt}, is too large and will clip, as it requested ${_h} samples when the maximum is set to 20`);const ed=[];let td=0;for(let ut=0;ut<_u;++ut){const ae=ut/Ju,ue=Math.exp(-ae*ae/2);ed.push(ue),0===ut?td+=ue:ut<_h&&(td+=2*ue)}for(let ut=0;ut<ed.length;ut++)ed[ut]=ed[ut]/td;wu.envMap.value=ae.texture,wu.samples.value=_h,wu.weights.value=ed,wu.latitudinal.value="latitudinal"===Xt,ys&&(wu.poleAxis.value=ys);const{_lodMax:id}=this;wu.dTheta.value=qu,wu.mipInt.value=id-nt;const nd=this._sizeLods[qt];_setViewport(ue,3*nd*(qt>id-4?qt-id+4:0),4*(this._cubeSize-nd),3*nd,2*nd),Ec.setRenderTarget(ue),Ec.render(uu,vu)}}function _createRenderTarget(ae,ue,nt){const qt=new ut.nWS(ae,ue,nt);return qt.texture.mapping=ut.Om,qt.texture.name="PMREM.cubeUv",qt.scissorTest=!0,qt}function _setViewport(ae,ue,nt,ut,qt){ae.viewport.set(ue,nt,ut,qt),ae.scissor.set(ue,nt,ut,qt)}function _getEquirectMaterial(){return new ut.BKk({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null}},vertexShader:_getCommonVertexShader(),fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\n\t\t\t#include <common>\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tgl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 );\n\n\t\t\t}\n\t\t",blending:ut.XIg,depthTest:!1,depthWrite:!1})}function _getCubemapMaterial(){return new ut.BKk({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:_getCommonVertexShader(),fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tuniform float flipEnvMap;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) );\n\n\t\t\t}\n\t\t",blending:ut.XIg,depthTest:!1,depthWrite:!1})}function _getCommonVertexShader(){return"\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t"}function WebGLCubeUVMaps(ae){let ue=new WeakMap,nt=null;function onTextureDispose(ae){const nt=ae.target;nt.removeEventListener("dispose",onTextureDispose);const ut=ue.get(nt);void 0!==ut&&(ue.delete(nt),ut.dispose())}return{get:function(qt){if(qt&&qt.isTexture){const Yt=qt.mapping,Xt=Yt===ut.wfO||Yt===ut.uV5,ys=Yt===ut.hy7||Yt===ut.xFO;if(Xt||ys){let ut=ue.get(qt);const Yt=void 0!==ut?ut.texture.pmremVersion:0;if(qt.isRenderTargetTexture&&qt.pmremVersion!==Yt)return null===nt&&(nt=new PMREMGenerator(ae)),ut=Xt?nt.fromEquirectangular(qt,ut):nt.fromCubemap(qt,ut),ut.texture.pmremVersion=qt.pmremVersion,ue.set(qt,ut),ut.texture;if(void 0!==ut)return ut.texture;{const Yt=qt.image;return Xt&&Yt&&Yt.height>0||ys&&Yt&&function(ae){let ue=0;const nt=6;for(let ut=0;ut<nt;ut++)void 0!==ae[ut]&&ue++;return ue===nt}(Yt)?(null===nt&&(nt=new PMREMGenerator(ae)),ut=Xt?nt.fromEquirectangular(qt):nt.fromCubemap(qt),ut.texture.pmremVersion=qt.pmremVersion,ue.set(qt,ut),qt.addEventListener("dispose",onTextureDispose),ut.texture):null}}}return qt},dispose:function(){ue=new WeakMap,null!==nt&&(nt.dispose(),nt=null)}}}function WebGLExtensions(ae){const ue={};function getExtension(nt){if(void 0!==ue[nt])return ue[nt];let ut;switch(nt){case"WEBGL_depth_texture":ut=ae.getExtension("WEBGL_depth_texture")||ae.getExtension("MOZ_WEBGL_depth_texture")||ae.getExtension("WEBKIT_WEBGL_depth_texture");break;case"EXT_texture_filter_anisotropic":ut=ae.getExtension("EXT_texture_filter_anisotropic")||ae.getExtension("MOZ_EXT_texture_filter_anisotropic")||ae.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":ut=ae.getExtension("WEBGL_compressed_texture_s3tc")||ae.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||ae.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":ut=ae.getExtension("WEBGL_compressed_texture_pvrtc")||ae.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;default:ut=ae.getExtension(nt)}return ue[nt]=ut,ut}return{has:function(ae){return null!==getExtension(ae)},init:function(){getExtension("EXT_color_buffer_float"),getExtension("WEBGL_clip_cull_distance"),getExtension("OES_texture_float_linear"),getExtension("EXT_color_buffer_half_float"),getExtension("WEBGL_multisampled_render_to_texture"),getExtension("WEBGL_render_shared_exponent")},get:function(ae){const ue=getExtension(ae);return null===ue&&(0,ut.mcG)("THREE.WebGLRenderer: "+ae+" extension not supported."),ue}}}function WebGLGeometries(ae,ue,nt,qt){const Yt={},Xt=new WeakMap;function onGeometryDispose(ae){const ut=ae.target;null!==ut.index&&ue.remove(ut.index);for(const nt in ut.attributes)ue.remove(ut.attributes[nt]);ut.removeEventListener("dispose",onGeometryDispose),delete Yt[ut.id];const ys=Xt.get(ut);ys&&(ue.remove(ys),Xt.delete(ut)),qt.releaseStatesOfGeometry(ut),!0===ut.isInstancedBufferGeometry&&delete ut._maxInstanceCount,nt.memory.geometries--}function updateWireframeAttribute(ae){const nt=[],qt=ae.index,Yt=ae.attributes.position;let ys=0;if(null!==qt){const ae=qt.array;ys=qt.version;for(let ue=0,ut=ae.length;ue<ut;ue+=3){const ut=ae[ue+0],qt=ae[ue+1],Yt=ae[ue+2];nt.push(ut,qt,qt,Yt,Yt,ut)}}else{if(void 0===Yt)return;{const ae=Yt.array;ys=Yt.version;for(let ue=0,ut=ae.length/3-1;ue<ut;ue+=3){const ae=ue+0,ut=ue+1,qt=ue+2;nt.push(ae,ut,ut,qt,qt,ae)}}}const Ec=new((0,ut.AQS)(nt)?ut.MW4:ut.A$4)(nt,1);Ec.version=ys;const lu=Xt.get(ae);lu&&ue.remove(lu),Xt.set(ae,Ec)}return{get:function(ae,ue){return!0===Yt[ue.id]||(ue.addEventListener("dispose",onGeometryDispose),Yt[ue.id]=!0,nt.memory.geometries++),ue},update:function(nt){const ut=nt.attributes;for(const qt in ut)ue.update(ut[qt],ae.ARRAY_BUFFER)},getWireframeAttribute:function(ae){const ue=Xt.get(ae);if(ue){const nt=ae.index;null!==nt&&ue.version<nt.version&&updateWireframeAttribute(ae)}else updateWireframeAttribute(ae);return Xt.get(ae)}}}function WebGLIndexedBufferRenderer(ae,ue,nt){let ut,qt,Yt;function renderInstances(ue,Xt,ys){0!==ys&&(ae.drawElementsInstanced(ut,Xt,qt,ue*Yt,ys),nt.update(Xt,ut,ys))}this.setMode=function(ae){ut=ae},this.setIndex=function(ae){qt=ae.type,Yt=ae.bytesPerElement},this.render=function(ue,Xt){ae.drawElements(ut,Xt,qt,ue*Yt),nt.update(Xt,ut,1)},this.renderInstances=renderInstances,this.renderMultiDraw=function(ae,Yt,Xt){if(0===Xt)return;ue.get("WEBGL_multi_draw").multiDrawElementsWEBGL(ut,Yt,0,qt,ae,0,Xt);let ys=0;for(let ue=0;ue<Xt;ue++)ys+=Yt[ue];nt.update(ys,ut,1)},this.renderMultiDrawInstances=function(ae,Xt,ys,Ec){if(0===ys)return;const lu=ue.get("WEBGL_multi_draw");if(null===lu)for(let ue=0;ue<ae.length;ue++)renderInstances(ae[ue]/Yt,Xt[ue],Ec[ue]);else{lu.multiDrawElementsInstancedWEBGL(ut,Xt,0,qt,ae,0,Ec,0,ys);let ue=0;for(let ae=0;ae<ys;ae++)ue+=Xt[ae]*Ec[ae];nt.update(ue,ut,1)}}}function WebGLInfo(ae){const ue={frame:0,calls:0,triangles:0,points:0,lines:0};return{memory:{geometries:0,textures:0},render:ue,programs:null,autoReset:!0,reset:function(){ue.calls=0,ue.triangles=0,ue.points=0,ue.lines=0},update:function(nt,ut,qt){switch(ue.calls++,ut){case ae.TRIANGLES:ue.triangles+=qt*(nt/3);break;case ae.LINES:ue.lines+=qt*(nt/2);break;case ae.LINE_STRIP:ue.lines+=qt*(nt-1);break;case ae.LINE_LOOP:ue.lines+=qt*nt;break;case ae.POINTS:ue.points+=qt*nt;break;default:console.error("THREE.WebGLInfo: Unknown draw mode:",ut)}}}}function WebGLMorphtargets(ae,ue,nt){const qt=new WeakMap,Yt=new ut.IUQ;return{update:function(Xt,ys,Ec){const lu=Xt.morphTargetInfluences,uu=ys.morphAttributes.position||ys.morphAttributes.normal||ys.morphAttributes.color,_u=void 0!==uu?uu.length:0;let vu=qt.get(ys);if(void 0===vu||vu.count!==_u){void 0!==vu&&vu.texture.dispose();const wu=void 0!==ys.morphAttributes.position,Hu=void 0!==ys.morphAttributes.normal,qu=void 0!==ys.morphAttributes.color,Ju=ys.morphAttributes.position||[],_h=ys.morphAttributes.normal||[],ed=ys.morphAttributes.color||[];let td=0;!0===wu&&(td=1),!0===Hu&&(td=2),!0===qu&&(td=3);let id=ys.attributes.position.count*td,nd=1;id>ue.maxTextureSize&&(nd=Math.ceil(id/ue.maxTextureSize),id=ue.maxTextureSize);const rd=new Float32Array(id*nd*4*_u),ad=new ut.rFo(rd,id,nd,_u);ad.type=ut.RQf,ad.needsUpdate=!0;const sd=4*td;for(let od=0;od<_u;od++){const ld=Ju[od],cd=_h[od],ud=ed[od],hd=id*nd*4*od;for(let dd=0;dd<ld.count;dd++){const pd=dd*sd;!0===wu&&(Yt.fromBufferAttribute(ld,dd),rd[hd+pd+0]=Yt.x,rd[hd+pd+1]=Yt.y,rd[hd+pd+2]=Yt.z,rd[hd+pd+3]=0),!0===Hu&&(Yt.fromBufferAttribute(cd,dd),rd[hd+pd+4]=Yt.x,rd[hd+pd+5]=Yt.y,rd[hd+pd+6]=Yt.z,rd[hd+pd+7]=0),!0===qu&&(Yt.fromBufferAttribute(ud,dd),rd[hd+pd+8]=Yt.x,rd[hd+pd+9]=Yt.y,rd[hd+pd+10]=Yt.z,rd[hd+pd+11]=4===ud.itemSize?Yt.w:1)}}function disposeTexture(){ad.dispose(),qt.delete(ys),ys.removeEventListener("dispose",disposeTexture)}vu={count:_u,texture:ad,size:new ut.I9Y(id,nd)},qt.set(ys,vu),ys.addEventListener("dispose",disposeTexture)}if(!0===Xt.isInstancedMesh&&null!==Xt.morphTexture)Ec.getUniforms().setValue(ae,"morphTexture",Xt.morphTexture,nt);else{let md=0;for(let fd=0;fd<lu.length;fd++)md+=lu[fd];const gd=ys.morphTargetsRelative?1:1-md;Ec.getUniforms().setValue(ae,"morphTargetBaseInfluence",gd),Ec.getUniforms().setValue(ae,"morphTargetInfluences",lu)}Ec.getUniforms().setValue(ae,"morphTargetsTexture",vu.texture,nt),Ec.getUniforms().setValue(ae,"morphTargetsTextureSize",vu.size)}}}function WebGLObjects(ae,ue,nt,ut){let qt=new WeakMap;function onInstancedMeshDispose(ae){const ue=ae.target;ue.removeEventListener("dispose",onInstancedMeshDispose),nt.remove(ue.instanceMatrix),null!==ue.instanceColor&&nt.remove(ue.instanceColor)}return{update:function(Yt){const Xt=ut.render.frame,ys=Yt.geometry,Ec=ue.get(Yt,ys);if(qt.get(Ec)!==Xt&&(ue.update(Ec),qt.set(Ec,Xt)),Yt.isInstancedMesh&&(!1===Yt.hasEventListener("dispose",onInstancedMeshDispose)&&Yt.addEventListener("dispose",onInstancedMeshDispose),qt.get(Yt)!==Xt&&(nt.update(Yt.instanceMatrix,ae.ARRAY_BUFFER),null!==Yt.instanceColor&&nt.update(Yt.instanceColor,ae.ARRAY_BUFFER),qt.set(Yt,Xt))),Yt.isSkinnedMesh){const ae=Yt.skeleton;qt.get(ae)!==Xt&&(ae.update(),qt.set(ae,Xt))}return Ec},dispose:function(){qt=new WeakMap}}}const rd=new ut.gPd,ad=new ut.VCu(1,1),sd=new ut.rFo,od=new ut.dYF,ld=new ut.b4q,cd=[],ud=[],hd=new Float32Array(16),dd=new Float32Array(9),pd=new Float32Array(4);function flatten(ae,ue,nt){const ut=ae[0];if(ut<=0||ut>0)return ae;const qt=ue*nt;let Yt=cd[qt];if(void 0===Yt&&(Yt=new Float32Array(qt),cd[qt]=Yt),0!==ue){ut.toArray(Yt,0);for(let ut=1,qt=0;ut!==ue;++ut)qt+=nt,ae[ut].toArray(Yt,qt)}return Yt}function arraysEqual(ae,ue){if(ae.length!==ue.length)return!1;for(let nt=0,ut=ae.length;nt<ut;nt++)if(ae[nt]!==ue[nt])return!1;return!0}function copyArray(ae,ue){for(let nt=0,ut=ue.length;nt<ut;nt++)ae[nt]=ue[nt]}function allocTexUnits(ae,ue){let nt=ud[ue];void 0===nt&&(nt=new Int32Array(ue),ud[ue]=nt);for(let ut=0;ut!==ue;++ut)nt[ut]=ae.allocateTextureUnit();return nt}function setValueV1f(ae,ue){const nt=this.cache;nt[0]!==ue&&(ae.uniform1f(this.addr,ue),nt[0]=ue)}function setValueV2f(ae,ue){const nt=this.cache;if(void 0!==ue.x)nt[0]===ue.x&&nt[1]===ue.y||(ae.uniform2f(this.addr,ue.x,ue.y),nt[0]=ue.x,nt[1]=ue.y);else{if(arraysEqual(nt,ue))return;ae.uniform2fv(this.addr,ue),copyArray(nt,ue)}}function setValueV3f(ae,ue){const nt=this.cache;if(void 0!==ue.x)nt[0]===ue.x&&nt[1]===ue.y&&nt[2]===ue.z||(ae.uniform3f(this.addr,ue.x,ue.y,ue.z),nt[0]=ue.x,nt[1]=ue.y,nt[2]=ue.z);else if(void 0!==ue.r)nt[0]===ue.r&&nt[1]===ue.g&&nt[2]===ue.b||(ae.uniform3f(this.addr,ue.r,ue.g,ue.b),nt[0]=ue.r,nt[1]=ue.g,nt[2]=ue.b);else{if(arraysEqual(nt,ue))return;ae.uniform3fv(this.addr,ue),copyArray(nt,ue)}}function setValueV4f(ae,ue){const nt=this.cache;if(void 0!==ue.x)nt[0]===ue.x&&nt[1]===ue.y&&nt[2]===ue.z&&nt[3]===ue.w||(ae.uniform4f(this.addr,ue.x,ue.y,ue.z,ue.w),nt[0]=ue.x,nt[1]=ue.y,nt[2]=ue.z,nt[3]=ue.w);else{if(arraysEqual(nt,ue))return;ae.uniform4fv(this.addr,ue),copyArray(nt,ue)}}function setValueM2(ae,ue){const nt=this.cache,ut=ue.elements;if(void 0===ut){if(arraysEqual(nt,ue))return;ae.uniformMatrix2fv(this.addr,!1,ue),copyArray(nt,ue)}else{if(arraysEqual(nt,ut))return;pd.set(ut),ae.uniformMatrix2fv(this.addr,!1,pd),copyArray(nt,ut)}}function setValueM3(ae,ue){const nt=this.cache,ut=ue.elements;if(void 0===ut){if(arraysEqual(nt,ue))return;ae.uniformMatrix3fv(this.addr,!1,ue),copyArray(nt,ue)}else{if(arraysEqual(nt,ut))return;dd.set(ut),ae.uniformMatrix3fv(this.addr,!1,dd),copyArray(nt,ut)}}function setValueM4(ae,ue){const nt=this.cache,ut=ue.elements;if(void 0===ut){if(arraysEqual(nt,ue))return;ae.uniformMatrix4fv(this.addr,!1,ue),copyArray(nt,ue)}else{if(arraysEqual(nt,ut))return;hd.set(ut),ae.uniformMatrix4fv(this.addr,!1,hd),copyArray(nt,ut)}}function setValueV1i(ae,ue){const nt=this.cache;nt[0]!==ue&&(ae.uniform1i(this.addr,ue),nt[0]=ue)}function setValueV2i(ae,ue){const nt=this.cache;if(void 0!==ue.x)nt[0]===ue.x&&nt[1]===ue.y||(ae.uniform2i(this.addr,ue.x,ue.y),nt[0]=ue.x,nt[1]=ue.y);else{if(arraysEqual(nt,ue))return;ae.uniform2iv(this.addr,ue),copyArray(nt,ue)}}function setValueV3i(ae,ue){const nt=this.cache;if(void 0!==ue.x)nt[0]===ue.x&&nt[1]===ue.y&&nt[2]===ue.z||(ae.uniform3i(this.addr,ue.x,ue.y,ue.z),nt[0]=ue.x,nt[1]=ue.y,nt[2]=ue.z);else{if(arraysEqual(nt,ue))return;ae.uniform3iv(this.addr,ue),copyArray(nt,ue)}}function setValueV4i(ae,ue){const nt=this.cache;if(void 0!==ue.x)nt[0]===ue.x&&nt[1]===ue.y&&nt[2]===ue.z&&nt[3]===ue.w||(ae.uniform4i(this.addr,ue.x,ue.y,ue.z,ue.w),nt[0]=ue.x,nt[1]=ue.y,nt[2]=ue.z,nt[3]=ue.w);else{if(arraysEqual(nt,ue))return;ae.uniform4iv(this.addr,ue),copyArray(nt,ue)}}function setValueV1ui(ae,ue){const nt=this.cache;nt[0]!==ue&&(ae.uniform1ui(this.addr,ue),nt[0]=ue)}function setValueV2ui(ae,ue){const nt=this.cache;if(void 0!==ue.x)nt[0]===ue.x&&nt[1]===ue.y||(ae.uniform2ui(this.addr,ue.x,ue.y),nt[0]=ue.x,nt[1]=ue.y);else{if(arraysEqual(nt,ue))return;ae.uniform2uiv(this.addr,ue),copyArray(nt,ue)}}function setValueV3ui(ae,ue){const nt=this.cache;if(void 0!==ue.x)nt[0]===ue.x&&nt[1]===ue.y&&nt[2]===ue.z||(ae.uniform3ui(this.addr,ue.x,ue.y,ue.z),nt[0]=ue.x,nt[1]=ue.y,nt[2]=ue.z);else{if(arraysEqual(nt,ue))return;ae.uniform3uiv(this.addr,ue),copyArray(nt,ue)}}function setValueV4ui(ae,ue){const nt=this.cache;if(void 0!==ue.x)nt[0]===ue.x&&nt[1]===ue.y&&nt[2]===ue.z&&nt[3]===ue.w||(ae.uniform4ui(this.addr,ue.x,ue.y,ue.z,ue.w),nt[0]=ue.x,nt[1]=ue.y,nt[2]=ue.z,nt[3]=ue.w);else{if(arraysEqual(nt,ue))return;ae.uniform4uiv(this.addr,ue),copyArray(nt,ue)}}function setValueT1(ae,ue,nt){const qt=this.cache,Yt=nt.allocateTextureUnit();let Xt;qt[0]!==Yt&&(ae.uniform1i(this.addr,Yt),qt[0]=Yt),this.type===ae.SAMPLER_2D_SHADOW?(ad.compareFunction=ut.TiK,Xt=ad):Xt=rd,nt.setTexture2D(ue||Xt,Yt)}function setValueT3D1(ae,ue,nt){const ut=this.cache,qt=nt.allocateTextureUnit();ut[0]!==qt&&(ae.uniform1i(this.addr,qt),ut[0]=qt),nt.setTexture3D(ue||od,qt)}function setValueT6(ae,ue,nt){const ut=this.cache,qt=nt.allocateTextureUnit();ut[0]!==qt&&(ae.uniform1i(this.addr,qt),ut[0]=qt),nt.setTextureCube(ue||ld,qt)}function setValueT2DArray1(ae,ue,nt){const ut=this.cache,qt=nt.allocateTextureUnit();ut[0]!==qt&&(ae.uniform1i(this.addr,qt),ut[0]=qt),nt.setTexture2DArray(ue||sd,qt)}function setValueV1fArray(ae,ue){ae.uniform1fv(this.addr,ue)}function setValueV2fArray(ae,ue){const nt=flatten(ue,this.size,2);ae.uniform2fv(this.addr,nt)}function setValueV3fArray(ae,ue){const nt=flatten(ue,this.size,3);ae.uniform3fv(this.addr,nt)}function setValueV4fArray(ae,ue){const nt=flatten(ue,this.size,4);ae.uniform4fv(this.addr,nt)}function setValueM2Array(ae,ue){const nt=flatten(ue,this.size,4);ae.uniformMatrix2fv(this.addr,!1,nt)}function setValueM3Array(ae,ue){const nt=flatten(ue,this.size,9);ae.uniformMatrix3fv(this.addr,!1,nt)}function setValueM4Array(ae,ue){const nt=flatten(ue,this.size,16);ae.uniformMatrix4fv(this.addr,!1,nt)}function setValueV1iArray(ae,ue){ae.uniform1iv(this.addr,ue)}function setValueV2iArray(ae,ue){ae.uniform2iv(this.addr,ue)}function setValueV3iArray(ae,ue){ae.uniform3iv(this.addr,ue)}function setValueV4iArray(ae,ue){ae.uniform4iv(this.addr,ue)}function setValueV1uiArray(ae,ue){ae.uniform1uiv(this.addr,ue)}function setValueV2uiArray(ae,ue){ae.uniform2uiv(this.addr,ue)}function setValueV3uiArray(ae,ue){ae.uniform3uiv(this.addr,ue)}function setValueV4uiArray(ae,ue){ae.uniform4uiv(this.addr,ue)}function setValueT1Array(ae,ue,nt){const ut=this.cache,qt=ue.length,Yt=allocTexUnits(nt,qt);arraysEqual(ut,Yt)||(ae.uniform1iv(this.addr,Yt),copyArray(ut,Yt));for(let Xt=0;Xt!==qt;++Xt)nt.setTexture2D(ue[Xt]||rd,Yt[Xt])}function setValueT3DArray(ae,ue,nt){const ut=this.cache,qt=ue.length,Yt=allocTexUnits(nt,qt);arraysEqual(ut,Yt)||(ae.uniform1iv(this.addr,Yt),copyArray(ut,Yt));for(let Xt=0;Xt!==qt;++Xt)nt.setTexture3D(ue[Xt]||od,Yt[Xt])}function setValueT6Array(ae,ue,nt){const ut=this.cache,qt=ue.length,Yt=allocTexUnits(nt,qt);arraysEqual(ut,Yt)||(ae.uniform1iv(this.addr,Yt),copyArray(ut,Yt));for(let Xt=0;Xt!==qt;++Xt)nt.setTextureCube(ue[Xt]||ld,Yt[Xt])}function setValueT2DArrayArray(ae,ue,nt){const ut=this.cache,qt=ue.length,Yt=allocTexUnits(nt,qt);arraysEqual(ut,Yt)||(ae.uniform1iv(this.addr,Yt),copyArray(ut,Yt));for(let Xt=0;Xt!==qt;++Xt)nt.setTexture2DArray(ue[Xt]||sd,Yt[Xt])}class SingleUniform{constructor(ae,ue,nt){this.id=ae,this.addr=nt,this.cache=[],this.type=ue.type,this.setValue=function(ae){switch(ae){case 5126:return setValueV1f;case 35664:return setValueV2f;case 35665:return setValueV3f;case 35666:return setValueV4f;case 35674:return setValueM2;case 35675:return setValueM3;case 35676:return setValueM4;case 5124:case 35670:return setValueV1i;case 35667:case 35671:return setValueV2i;case 35668:case 35672:return setValueV3i;case 35669:case 35673:return setValueV4i;case 5125:return setValueV1ui;case 36294:return setValueV2ui;case 36295:return setValueV3ui;case 36296:return setValueV4ui;case 35678:case 36198:case 36298:case 36306:case 35682:return setValueT1;case 35679:case 36299:case 36307:return setValueT3D1;case 35680:case 36300:case 36308:case 36293:return setValueT6;case 36289:case 36303:case 36311:case 36292:return setValueT2DArray1}}(ue.type)}}class PureArrayUniform{constructor(ae,ue,nt){this.id=ae,this.addr=nt,this.cache=[],this.type=ue.type,this.size=ue.size,this.setValue=function(ae){switch(ae){case 5126:return setValueV1fArray;case 35664:return setValueV2fArray;case 35665:return setValueV3fArray;case 35666:return setValueV4fArray;case 35674:return setValueM2Array;case 35675:return setValueM3Array;case 35676:return setValueM4Array;case 5124:case 35670:return setValueV1iArray;case 35667:case 35671:return setValueV2iArray;case 35668:case 35672:return setValueV3iArray;case 35669:case 35673:return setValueV4iArray;case 5125:return setValueV1uiArray;case 36294:return setValueV2uiArray;case 36295:return setValueV3uiArray;case 36296:return setValueV4uiArray;case 35678:case 36198:case 36298:case 36306:case 35682:return setValueT1Array;case 35679:case 36299:case 36307:return setValueT3DArray;case 35680:case 36300:case 36308:case 36293:return setValueT6Array;case 36289:case 36303:case 36311:case 36292:return setValueT2DArrayArray}}(ue.type)}}class StructuredUniform{constructor(ae){this.id=ae,this.seq=[],this.map={}}setValue(ae,ue,nt){const ut=this.seq;for(let qt=0,Yt=ut.length;qt!==Yt;++qt){const Yt=ut[qt];Yt.setValue(ae,ue[Yt.id],nt)}}}const md=/(\w+)(\])?(\[|\.)?/g;function addUniform(ae,ue){ae.seq.push(ue),ae.map[ue.id]=ue}function parseUniform(ae,ue,nt){const ut=ae.name,qt=ut.length;for(md.lastIndex=0;;){const Yt=md.exec(ut),Xt=md.lastIndex;let ys=Yt[1];const Ec="]"===Yt[2],lu=Yt[3];if(Ec&&(ys|=0),void 0===lu||"["===lu&&Xt+2===qt){addUniform(nt,void 0===lu?new SingleUniform(ys,ae,ue):new PureArrayUniform(ys,ae,ue));break}{let ae=nt.map[ys];void 0===ae&&(ae=new StructuredUniform(ys),addUniform(nt,ae)),nt=ae}}}class WebGLUniforms{constructor(ae,ue){this.seq=[],this.map={};const nt=ae.getProgramParameter(ue,ae.ACTIVE_UNIFORMS);for(let ut=0;ut<nt;++ut){const nt=ae.getActiveUniform(ue,ut);parseUniform(nt,ae.getUniformLocation(ue,nt.name),this)}}setValue(ae,ue,nt,ut){const qt=this.map[ue];void 0!==qt&&qt.setValue(ae,nt,ut)}setOptional(ae,ue,nt){const ut=ue[nt];void 0!==ut&&this.setValue(ae,nt,ut)}static upload(ae,ue,nt,ut){for(let qt=0,Yt=ue.length;qt!==Yt;++qt){const Yt=ue[qt],Xt=nt[Yt.id];!1!==Xt.needsUpdate&&Yt.setValue(ae,Xt.value,ut)}}static seqWithValue(ae,ue){const nt=[];for(let ut=0,qt=ae.length;ut!==qt;++ut){const qt=ae[ut];qt.id in ue&&nt.push(qt)}return nt}}function WebGLShader(ae,ue,nt){const ut=ae.createShader(ue);return ae.shaderSource(ut,nt),ae.compileShader(ut),ut}let gd=0;const fd=new ut.dwI;function getShaderErrors(ae,ue,nt){const ut=ae.getShaderParameter(ue,ae.COMPILE_STATUS),qt=(ae.getShaderInfoLog(ue)||"").trim();if(ut&&""===qt)return"";const Yt=/ERROR: 0:(\d+)/.exec(qt);if(Yt){const ut=parseInt(Yt[1]);return nt.toUpperCase()+"\n\n"+qt+"\n\n"+function(ae,ue){const nt=ae.split("\n"),ut=[],qt=Math.max(ue-6,0),Yt=Math.min(ue+6,nt.length);for(let Xt=qt;Xt<Yt;Xt++){const ae=Xt+1;ut.push(`${ae===ue?">":" "} ${ae}: ${nt[Xt]}`)}return ut.join("\n")}(ae.getShaderSource(ue),ut)}return qt}function getTexelEncodingFunction(ae,ue){const nt=function(ae){ut.ppV._getMatrix(fd,ut.ppV.workingColorSpace,ae);const ue=`mat3( ${fd.elements.map((ae=>ae.toFixed(4)))} )`;switch(ut.ppV.getTransfer(ae)){case ut.VxR:return[ue,"LinearTransferOETF"];case ut.KLL:return[ue,"sRGBTransferOETF"];default:return console.warn("THREE.WebGLProgram: Unsupported color space: ",ae),[ue,"LinearTransferOETF"]}}(ue);return[`vec4 ${ae}( vec4 value ) {`,`\treturn ${nt[1]}( vec4( value.rgb * ${nt[0]}, value.a ) );`,"}"].join("\n")}function getToneMappingFunction(ae,ue){let nt;switch(ue){case ut.kyO:nt="Linear";break;case ut.Mjd:nt="Reinhard";break;case ut.nNL:nt="Cineon";break;case ut.FV:nt="ACESFilmic";break;case ut.LAk:nt="AgX";break;case ut.aJ8:nt="Neutral";break;case ut.g7M:nt="Custom";break;default:console.warn("THREE.WebGLProgram: Unsupported toneMapping:",ue),nt="Linear"}return"vec3 "+ae+"( vec3 color ) { return "+nt+"ToneMapping( color ); }"}const Ad=new ut.Pq0;function getLuminanceFunction(){ut.ppV.getLuminanceCoefficients(Ad);return["float luminance( const in vec3 rgb ) {",`\tconst vec3 weights = vec3( ${Ad.x.toFixed(4)}, ${Ad.y.toFixed(4)}, ${Ad.z.toFixed(4)} );`,"\treturn dot( weights, rgb );","}"].join("\n")}function filterEmptyLine(ae){return""!==ae}function replaceLightNums(ae,ue){const nt=ue.numSpotLightShadows+ue.numSpotLightMaps-ue.numSpotLightShadowsWithMaps;return ae.replace(/NUM_DIR_LIGHTS/g,ue.numDirLights).replace(/NUM_SPOT_LIGHTS/g,ue.numSpotLights).replace(/NUM_SPOT_LIGHT_MAPS/g,ue.numSpotLightMaps).replace(/NUM_SPOT_LIGHT_COORDS/g,nt).replace(/NUM_RECT_AREA_LIGHTS/g,ue.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,ue.numPointLights).replace(/NUM_HEMI_LIGHTS/g,ue.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g,ue.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g,ue.numSpotLightShadowsWithMaps).replace(/NUM_SPOT_LIGHT_SHADOWS/g,ue.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g,ue.numPointLightShadows)}function replaceClippingPlaneNums(ae,ue){return ae.replace(/NUM_CLIPPING_PLANES/g,ue.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g,ue.numClippingPlanes-ue.numClipIntersection)}const yd=/^[ \t]*#include +<([\w\d./]+)>/gm;function resolveIncludes(ae){return ae.replace(yd,includeReplacer)}const _d=new Map;function includeReplacer(ae,ue){let nt=qt[ue];if(void 0===nt){const ae=_d.get(ue);if(void 0===ae)throw new Error("Can not resolve #include <"+ue+">");nt=qt[ae],console.warn('THREE.WebGLRenderer: Shader chunk "%s" has been deprecated. Use "%s" instead.',ue,ae)}return resolveIncludes(nt)}const vd=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function unrollLoops(ae){return ae.replace(vd,loopReplacer)}function loopReplacer(ae,ue,nt,ut){let qt="";for(let Yt=parseInt(ue);Yt<parseInt(nt);Yt++)qt+=ut.replace(/\[\s*i\s*\]/g,"[ "+Yt+" ]").replace(/UNROLLED_LOOP_INDEX/g,Yt);return qt}function generatePrecision(ae){let ue=`precision ${ae.precision} float;\n\tprecision ${ae.precision} int;\n\tprecision ${ae.precision} sampler2D;\n\tprecision ${ae.precision} samplerCube;\n\tprecision ${ae.precision} sampler3D;\n\tprecision ${ae.precision} sampler2DArray;\n\tprecision ${ae.precision} sampler2DShadow;\n\tprecision ${ae.precision} samplerCubeShadow;\n\tprecision ${ae.precision} sampler2DArrayShadow;\n\tprecision ${ae.precision} isampler2D;\n\tprecision ${ae.precision} isampler3D;\n\tprecision ${ae.precision} isamplerCube;\n\tprecision ${ae.precision} isampler2DArray;\n\tprecision ${ae.precision} usampler2D;\n\tprecision ${ae.precision} usampler3D;\n\tprecision ${ae.precision} usamplerCube;\n\tprecision ${ae.precision} usampler2DArray;\n\t`;return"highp"===ae.precision?ue+="\n#define HIGH_PRECISION":"mediump"===ae.precision?ue+="\n#define MEDIUM_PRECISION":"lowp"===ae.precision&&(ue+="\n#define LOW_PRECISION"),ue}function WebGLProgram(ae,ue,nt,Yt){const Xt=ae.getContext(),ys=nt.defines;let Ec=nt.vertexShader,lu=nt.fragmentShader;const uu=function(ae){let ue="SHADOWMAP_TYPE_BASIC";return ae.shadowMapType===ut.QP0?ue="SHADOWMAP_TYPE_PCF":ae.shadowMapType===ut.Wk7?ue="SHADOWMAP_TYPE_PCF_SOFT":ae.shadowMapType===ut.RyA&&(ue="SHADOWMAP_TYPE_VSM"),ue}(nt),_u=function(ae){let ue="ENVMAP_TYPE_CUBE";if(ae.envMap)switch(ae.envMapMode){case ut.hy7:case ut.xFO:ue="ENVMAP_TYPE_CUBE";break;case ut.Om:ue="ENVMAP_TYPE_CUBE_UV"}return ue}(nt),vu=function(ae){let ue="ENVMAP_MODE_REFLECTION";ae.envMap&&ae.envMapMode===ut.xFO&&(ue="ENVMAP_MODE_REFRACTION");return ue}(nt),wu=function(ae){let ue="ENVMAP_BLENDING_NONE";if(ae.envMap)switch(ae.combine){case ut.caT:ue="ENVMAP_BLENDING_MULTIPLY";break;case ut.KRh:ue="ENVMAP_BLENDING_MIX";break;case ut.XrR:ue="ENVMAP_BLENDING_ADD"}return ue}(nt),Hu=function(ae){const ue=ae.envMapCubeUVHeight;if(null===ue)return null;const nt=Math.log2(ue)-2,ut=1/ue;return{texelWidth:1/(3*Math.max(Math.pow(2,nt),112)),texelHeight:ut,maxMip:nt}}(nt),qu=function(ae){return[ae.extensionClipCullDistance?"#extension GL_ANGLE_clip_cull_distance : require":"",ae.extensionMultiDraw?"#extension GL_ANGLE_multi_draw : require":""].filter(filterEmptyLine).join("\n")}(nt),Ju=function(ae){const ue=[];for(const nt in ae){const ut=ae[nt];!1!==ut&&ue.push("#define "+nt+" "+ut)}return ue.join("\n")}(ys),_h=Xt.createProgram();let ed,td,id=nt.glslVersion?"#version "+nt.glslVersion+"\n":"";nt.isRawShaderMaterial?(ed=["#define SHADER_TYPE "+nt.shaderType,"#define SHADER_NAME "+nt.shaderName,Ju].filter(filterEmptyLine).join("\n"),ed.length>0&&(ed+="\n"),td=["#define SHADER_TYPE "+nt.shaderType,"#define SHADER_NAME "+nt.shaderName,Ju].filter(filterEmptyLine).join("\n"),td.length>0&&(td+="\n")):(ed=[generatePrecision(nt),"#define SHADER_TYPE "+nt.shaderType,"#define SHADER_NAME "+nt.shaderName,Ju,nt.extensionClipCullDistance?"#define USE_CLIP_DISTANCE":"",nt.batching?"#define USE_BATCHING":"",nt.batchingColor?"#define USE_BATCHING_COLOR":"",nt.instancing?"#define USE_INSTANCING":"",nt.instancingColor?"#define USE_INSTANCING_COLOR":"",nt.instancingMorph?"#define USE_INSTANCING_MORPH":"",nt.useFog&&nt.fog?"#define USE_FOG":"",nt.useFog&&nt.fogExp2?"#define FOG_EXP2":"",nt.map?"#define USE_MAP":"",nt.envMap?"#define USE_ENVMAP":"",nt.envMap?"#define "+vu:"",nt.lightMap?"#define USE_LIGHTMAP":"",nt.aoMap?"#define USE_AOMAP":"",nt.bumpMap?"#define USE_BUMPMAP":"",nt.normalMap?"#define USE_NORMALMAP":"",nt.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",nt.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",nt.displacementMap?"#define USE_DISPLACEMENTMAP":"",nt.emissiveMap?"#define USE_EMISSIVEMAP":"",nt.anisotropy?"#define USE_ANISOTROPY":"",nt.anisotropyMap?"#define USE_ANISOTROPYMAP":"",nt.clearcoatMap?"#define USE_CLEARCOATMAP":"",nt.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",nt.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",nt.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",nt.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",nt.specularMap?"#define USE_SPECULARMAP":"",nt.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",nt.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",nt.roughnessMap?"#define USE_ROUGHNESSMAP":"",nt.metalnessMap?"#define USE_METALNESSMAP":"",nt.alphaMap?"#define USE_ALPHAMAP":"",nt.alphaHash?"#define USE_ALPHAHASH":"",nt.transmission?"#define USE_TRANSMISSION":"",nt.transmissionMap?"#define USE_TRANSMISSIONMAP":"",nt.thicknessMap?"#define USE_THICKNESSMAP":"",nt.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",nt.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",nt.mapUv?"#define MAP_UV "+nt.mapUv:"",nt.alphaMapUv?"#define ALPHAMAP_UV "+nt.alphaMapUv:"",nt.lightMapUv?"#define LIGHTMAP_UV "+nt.lightMapUv:"",nt.aoMapUv?"#define AOMAP_UV "+nt.aoMapUv:"",nt.emissiveMapUv?"#define EMISSIVEMAP_UV "+nt.emissiveMapUv:"",nt.bumpMapUv?"#define BUMPMAP_UV "+nt.bumpMapUv:"",nt.normalMapUv?"#define NORMALMAP_UV "+nt.normalMapUv:"",nt.displacementMapUv?"#define DISPLACEMENTMAP_UV "+nt.displacementMapUv:"",nt.metalnessMapUv?"#define METALNESSMAP_UV "+nt.metalnessMapUv:"",nt.roughnessMapUv?"#define ROUGHNESSMAP_UV "+nt.roughnessMapUv:"",nt.anisotropyMapUv?"#define ANISOTROPYMAP_UV "+nt.anisotropyMapUv:"",nt.clearcoatMapUv?"#define CLEARCOATMAP_UV "+nt.clearcoatMapUv:"",nt.clearcoatNormalMapUv?"#define CLEARCOAT_NORMALMAP_UV "+nt.clearcoatNormalMapUv:"",nt.clearcoatRoughnessMapUv?"#define CLEARCOAT_ROUGHNESSMAP_UV "+nt.clearcoatRoughnessMapUv:"",nt.iridescenceMapUv?"#define IRIDESCENCEMAP_UV "+nt.iridescenceMapUv:"",nt.iridescenceThicknessMapUv?"#define IRIDESCENCE_THICKNESSMAP_UV "+nt.iridescenceThicknessMapUv:"",nt.sheenColorMapUv?"#define SHEEN_COLORMAP_UV "+nt.sheenColorMapUv:"",nt.sheenRoughnessMapUv?"#define SHEEN_ROUGHNESSMAP_UV "+nt.sheenRoughnessMapUv:"",nt.specularMapUv?"#define SPECULARMAP_UV "+nt.specularMapUv:"",nt.specularColorMapUv?"#define SPECULAR_COLORMAP_UV "+nt.specularColorMapUv:"",nt.specularIntensityMapUv?"#define SPECULAR_INTENSITYMAP_UV "+nt.specularIntensityMapUv:"",nt.transmissionMapUv?"#define TRANSMISSIONMAP_UV "+nt.transmissionMapUv:"",nt.thicknessMapUv?"#define THICKNESSMAP_UV "+nt.thicknessMapUv:"",nt.vertexTangents&&!1===nt.flatShading?"#define USE_TANGENT":"",nt.vertexColors?"#define USE_COLOR":"",nt.vertexAlphas?"#define USE_COLOR_ALPHA":"",nt.vertexUv1s?"#define USE_UV1":"",nt.vertexUv2s?"#define USE_UV2":"",nt.vertexUv3s?"#define USE_UV3":"",nt.pointsUvs?"#define USE_POINTS_UV":"",nt.flatShading?"#define FLAT_SHADED":"",nt.skinning?"#define USE_SKINNING":"",nt.morphTargets?"#define USE_MORPHTARGETS":"",nt.morphNormals&&!1===nt.flatShading?"#define USE_MORPHNORMALS":"",nt.morphColors?"#define USE_MORPHCOLORS":"",nt.morphTargetsCount>0?"#define MORPHTARGETS_TEXTURE_STRIDE "+nt.morphTextureStride:"",nt.morphTargetsCount>0?"#define MORPHTARGETS_COUNT "+nt.morphTargetsCount:"",nt.doubleSided?"#define DOUBLE_SIDED":"",nt.flipSided?"#define FLIP_SIDED":"",nt.shadowMapEnabled?"#define USE_SHADOWMAP":"",nt.shadowMapEnabled?"#define "+uu:"",nt.sizeAttenuation?"#define USE_SIZEATTENUATION":"",nt.numLightProbes>0?"#define USE_LIGHT_PROBES":"",nt.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",nt.reversedDepthBuffer?"#define USE_REVERSEDEPTHBUF":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING","\tattribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR","\tattribute vec3 instanceColor;","#endif","#ifdef USE_INSTANCING_MORPH","\tuniform sampler2D morphTexture;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_UV1","\tattribute vec2 uv1;","#endif","#ifdef USE_UV2","\tattribute vec2 uv2;","#endif","#ifdef USE_UV3","\tattribute vec2 uv3;","#endif","#ifdef USE_TANGENT","\tattribute vec4 tangent;","#endif","#if defined( USE_COLOR_ALPHA )","\tattribute vec4 color;","#elif defined( USE_COLOR )","\tattribute vec3 color;","#endif","#ifdef USE_SKINNING","\tattribute vec4 skinIndex;","\tattribute vec4 skinWeight;","#endif","\n"].filter(filterEmptyLine).join("\n"),td=[generatePrecision(nt),"#define SHADER_TYPE "+nt.shaderType,"#define SHADER_NAME "+nt.shaderName,Ju,nt.useFog&&nt.fog?"#define USE_FOG":"",nt.useFog&&nt.fogExp2?"#define FOG_EXP2":"",nt.alphaToCoverage?"#define ALPHA_TO_COVERAGE":"",nt.map?"#define USE_MAP":"",nt.matcap?"#define USE_MATCAP":"",nt.envMap?"#define USE_ENVMAP":"",nt.envMap?"#define "+_u:"",nt.envMap?"#define "+vu:"",nt.envMap?"#define "+wu:"",Hu?"#define CUBEUV_TEXEL_WIDTH "+Hu.texelWidth:"",Hu?"#define CUBEUV_TEXEL_HEIGHT "+Hu.texelHeight:"",Hu?"#define CUBEUV_MAX_MIP "+Hu.maxMip+".0":"",nt.lightMap?"#define USE_LIGHTMAP":"",nt.aoMap?"#define USE_AOMAP":"",nt.bumpMap?"#define USE_BUMPMAP":"",nt.normalMap?"#define USE_NORMALMAP":"",nt.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",nt.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",nt.emissiveMap?"#define USE_EMISSIVEMAP":"",nt.anisotropy?"#define USE_ANISOTROPY":"",nt.anisotropyMap?"#define USE_ANISOTROPYMAP":"",nt.clearcoat?"#define USE_CLEARCOAT":"",nt.clearcoatMap?"#define USE_CLEARCOATMAP":"",nt.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",nt.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",nt.dispersion?"#define USE_DISPERSION":"",nt.iridescence?"#define USE_IRIDESCENCE":"",nt.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",nt.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",nt.specularMap?"#define USE_SPECULARMAP":"",nt.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",nt.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",nt.roughnessMap?"#define USE_ROUGHNESSMAP":"",nt.metalnessMap?"#define USE_METALNESSMAP":"",nt.alphaMap?"#define USE_ALPHAMAP":"",nt.alphaTest?"#define USE_ALPHATEST":"",nt.alphaHash?"#define USE_ALPHAHASH":"",nt.sheen?"#define USE_SHEEN":"",nt.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",nt.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",nt.transmission?"#define USE_TRANSMISSION":"",nt.transmissionMap?"#define USE_TRANSMISSIONMAP":"",nt.thicknessMap?"#define USE_THICKNESSMAP":"",nt.vertexTangents&&!1===nt.flatShading?"#define USE_TANGENT":"",nt.vertexColors||nt.instancingColor||nt.batchingColor?"#define USE_COLOR":"",nt.vertexAlphas?"#define USE_COLOR_ALPHA":"",nt.vertexUv1s?"#define USE_UV1":"",nt.vertexUv2s?"#define USE_UV2":"",nt.vertexUv3s?"#define USE_UV3":"",nt.pointsUvs?"#define USE_POINTS_UV":"",nt.gradientMap?"#define USE_GRADIENTMAP":"",nt.flatShading?"#define FLAT_SHADED":"",nt.doubleSided?"#define DOUBLE_SIDED":"",nt.flipSided?"#define FLIP_SIDED":"",nt.shadowMapEnabled?"#define USE_SHADOWMAP":"",nt.shadowMapEnabled?"#define "+uu:"",nt.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",nt.numLightProbes>0?"#define USE_LIGHT_PROBES":"",nt.decodeVideoTexture?"#define DECODE_VIDEO_TEXTURE":"",nt.decodeVideoTextureEmissive?"#define DECODE_VIDEO_TEXTURE_EMISSIVE":"",nt.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",nt.reversedDepthBuffer?"#define USE_REVERSEDEPTHBUF":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",nt.toneMapping!==ut.y_p?"#define TONE_MAPPING":"",nt.toneMapping!==ut.y_p?qt.tonemapping_pars_fragment:"",nt.toneMapping!==ut.y_p?getToneMappingFunction("toneMapping",nt.toneMapping):"",nt.dithering?"#define DITHERING":"",nt.opaque?"#define OPAQUE":"",qt.colorspace_pars_fragment,getTexelEncodingFunction("linearToOutputTexel",nt.outputColorSpace),getLuminanceFunction(),nt.useDepthPacking?"#define DEPTH_PACKING "+nt.depthPacking:"","\n"].filter(filterEmptyLine).join("\n")),Ec=resolveIncludes(Ec),Ec=replaceLightNums(Ec,nt),Ec=replaceClippingPlaneNums(Ec,nt),lu=resolveIncludes(lu),lu=replaceLightNums(lu,nt),lu=replaceClippingPlaneNums(lu,nt),Ec=unrollLoops(Ec),lu=unrollLoops(lu),!0!==nt.isRawShaderMaterial&&(id="#version 300 es\n",ed=[qu,"#define attribute in","#define varying out","#define texture2D texture"].join("\n")+"\n"+ed,td=["#define varying in",nt.glslVersion===ut.Wdf?"":"layout(location = 0) out highp vec4 pc_fragColor;",nt.glslVersion===ut.Wdf?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join("\n")+"\n"+td);const nd=id+ed+Ec,rd=id+td+lu,ad=WebGLShader(Xt,Xt.VERTEX_SHADER,nd),sd=WebGLShader(Xt,Xt.FRAGMENT_SHADER,rd);function onFirstUse(ue){if(ae.debug.checkShaderErrors){const nt=Xt.getProgramInfoLog(_h)||"",ut=Xt.getShaderInfoLog(ad)||"",qt=Xt.getShaderInfoLog(sd)||"",Yt=nt.trim(),ys=ut.trim(),Ec=qt.trim();let lu=!0,uu=!0;if(!1===Xt.getProgramParameter(_h,Xt.LINK_STATUS))if(lu=!1,"function"===typeof ae.debug.onShaderError)ae.debug.onShaderError(Xt,_h,ad,sd);else{const ae=getShaderErrors(Xt,ad,"vertex"),nt=getShaderErrors(Xt,sd,"fragment");console.error("THREE.WebGLProgram: Shader Error "+Xt.getError()+" - VALIDATE_STATUS "+Xt.getProgramParameter(_h,Xt.VALIDATE_STATUS)+"\n\nMaterial Name: "+ue.name+"\nMaterial Type: "+ue.type+"\n\nProgram Info Log: "+Yt+"\n"+ae+"\n"+nt)}else""!==Yt?console.warn("THREE.WebGLProgram: Program Info Log:",Yt):""!==ys&&""!==Ec||(uu=!1);uu&&(ue.diagnostics={runnable:lu,programLog:Yt,vertexShader:{log:ys,prefix:ed},fragmentShader:{log:Ec,prefix:td}})}Xt.deleteShader(ad),Xt.deleteShader(sd),od=new WebGLUniforms(Xt,_h),ld=function(ae,ue){const nt={},ut=ae.getProgramParameter(ue,ae.ACTIVE_ATTRIBUTES);for(let qt=0;qt<ut;qt++){const ut=ae.getActiveAttrib(ue,qt),Yt=ut.name;let Xt=1;ut.type===ae.FLOAT_MAT2&&(Xt=2),ut.type===ae.FLOAT_MAT3&&(Xt=3),ut.type===ae.FLOAT_MAT4&&(Xt=4),nt[Yt]={type:ut.type,location:ae.getAttribLocation(ue,Yt),locationSize:Xt}}return nt}(Xt,_h)}let od,ld;Xt.attachShader(_h,ad),Xt.attachShader(_h,sd),void 0!==nt.index0AttributeName?Xt.bindAttribLocation(_h,0,nt.index0AttributeName):!0===nt.morphTargets&&Xt.bindAttribLocation(_h,0,"position"),Xt.linkProgram(_h),this.getUniforms=function(){return void 0===od&&onFirstUse(this),od},this.getAttributes=function(){return void 0===ld&&onFirstUse(this),ld};let cd=!1===nt.rendererExtensionParallelShaderCompile;return this.isReady=function(){return!1===cd&&(cd=Xt.getProgramParameter(_h,37297)),cd},this.destroy=function(){Yt.releaseStatesOfProgram(this),Xt.deleteProgram(_h),this.program=void 0},this.type=nt.shaderType,this.name=nt.shaderName,this.id=gd++,this.cacheKey=ue,this.usedTimes=1,this.program=_h,this.vertexShader=ad,this.fragmentShader=sd,this}let xd=0;class WebGLShaderCache{constructor(){this.shaderCache=new Map,this.materialCache=new Map}update(ae){const ue=ae.vertexShader,nt=ae.fragmentShader,ut=this._getShaderStage(ue),qt=this._getShaderStage(nt),Yt=this._getShaderCacheForMaterial(ae);return!1===Yt.has(ut)&&(Yt.add(ut),ut.usedTimes++),!1===Yt.has(qt)&&(Yt.add(qt),qt.usedTimes++),this}remove(ae){const ue=this.materialCache.get(ae);for(const nt of ue)nt.usedTimes--,0===nt.usedTimes&&this.shaderCache.delete(nt.code);return this.materialCache.delete(ae),this}getVertexShaderID(ae){return this._getShaderStage(ae.vertexShader).id}getFragmentShaderID(ae){return this._getShaderStage(ae.fragmentShader).id}dispose(){this.shaderCache.clear(),this.materialCache.clear()}_getShaderCacheForMaterial(ae){const ue=this.materialCache;let nt=ue.get(ae);return void 0===nt&&(nt=new Set,ue.set(ae,nt)),nt}_getShaderStage(ae){const ue=this.shaderCache;let nt=ue.get(ae);return void 0===nt&&(nt=new WebGLShaderStage(ae),ue.set(ae,nt)),nt}}class WebGLShaderStage{constructor(ae){this.id=xd++,this.code=ae,this.usedTimes=0}}function WebGLPrograms(ae,ue,nt,qt,Yt,ys,Ec){const lu=new ut.zgK,uu=new WebGLShaderCache,_u=new Set,vu=[],wu=Yt.logarithmicDepthBuffer,Hu=Yt.vertexTextures;let qu=Yt.precision;const Ju={MeshDepthMaterial:"depth",MeshDistanceMaterial:"distanceRGBA",MeshNormalMaterial:"normal",MeshBasicMaterial:"basic",MeshLambertMaterial:"lambert",MeshPhongMaterial:"phong",MeshToonMaterial:"toon",MeshStandardMaterial:"physical",MeshPhysicalMaterial:"physical",MeshMatcapMaterial:"matcap",LineBasicMaterial:"basic",LineDashedMaterial:"dashed",PointsMaterial:"points",ShadowMaterial:"shadow",SpriteMaterial:"sprite"};function getChannel(ae){return _u.add(ae),0===ae?"uv":`uv${ae}`}return{getParameters:function(ys,lu,vu,_h,ed){const td=_h.fog,id=ed.geometry,nd=ys.isMeshStandardMaterial?_h.environment:null,rd=(ys.isMeshStandardMaterial?nt:ue).get(ys.envMap||nd),ad=rd&&rd.mapping===ut.Om?rd.image.height:null,sd=Ju[ys.type];null!==ys.precision&&(qu=Yt.getMaxPrecision(ys.precision),qu!==ys.precision&&console.warn("THREE.WebGLProgram.getParameters:",ys.precision,"not supported, using",qu,"instead."));const od=id.morphAttributes.position||id.morphAttributes.normal||id.morphAttributes.color,ld=void 0!==od?od.length:0;let cd,ud,hd,dd,pd=0;if(void 0!==id.morphAttributes.position&&(pd=1),void 0!==id.morphAttributes.normal&&(pd=2),void 0!==id.morphAttributes.color&&(pd=3),sd){const ae=Xt[sd];cd=ae.vertexShader,ud=ae.fragmentShader}else cd=ys.vertexShader,ud=ys.fragmentShader,uu.update(ys),hd=uu.getVertexShaderID(ys),dd=uu.getFragmentShaderID(ys);const md=ae.getRenderTarget(),gd=ae.state.buffers.depth.getReversed(),fd=!0===ed.isInstancedMesh,Ad=!0===ed.isBatchedMesh,yd=!!ys.map,_d=!!ys.matcap,vd=!!rd,xd=!!ys.aoMap,bd=!!ys.lightMap,wd=!!ys.bumpMap,Ed=!!ys.normalMap,Md=!!ys.displacementMap,Sd=!!ys.emissiveMap,Td=!!ys.metalnessMap,kd=!!ys.roughnessMap,Cd=ys.anisotropy>0,Id=ys.clearcoat>0,Dd=ys.dispersion>0,Ld=ys.iridescence>0,Pd=ys.sheen>0,zd=ys.transmission>0,Nd=Cd&&!!ys.anisotropyMap,Rd=Id&&!!ys.clearcoatMap,Od=Id&&!!ys.clearcoatNormalMap,Bd=Id&&!!ys.clearcoatRoughnessMap,Fd=Ld&&!!ys.iridescenceMap,jd=Ld&&!!ys.iridescenceThicknessMap,Ud=Pd&&!!ys.sheenColorMap,Vd=Pd&&!!ys.sheenRoughnessMap,Gd=!!ys.specularMap,Hd=!!ys.specularColorMap,Wd=!!ys.specularIntensityMap,qd=zd&&!!ys.transmissionMap,Zd=zd&&!!ys.thicknessMap,Yd=!!ys.gradientMap,Qd=!!ys.alphaMap,Kd=ys.alphaTest>0,Xd=!!ys.alphaHash,Jd=!!ys.extensions;let $d=ut.y_p;ys.toneMapped&&(null!==md&&!0!==md.isXRRenderTarget||($d=ae.toneMapping));const Fp={shaderID:sd,shaderType:ys.type,shaderName:ys.name,vertexShader:cd,fragmentShader:ud,defines:ys.defines,customVertexShaderID:hd,customFragmentShaderID:dd,isRawShaderMaterial:!0===ys.isRawShaderMaterial,glslVersion:ys.glslVersion,precision:qu,batching:Ad,batchingColor:Ad&&null!==ed._colorsTexture,instancing:fd,instancingColor:fd&&null!==ed.instanceColor,instancingMorph:fd&&null!==ed.morphTexture,supportsVertexTextures:Hu,outputColorSpace:null===md?ae.outputColorSpace:!0===md.isXRRenderTarget?md.texture.colorSpace:ut.Zr2,alphaToCoverage:!!ys.alphaToCoverage,map:yd,matcap:_d,envMap:vd,envMapMode:vd&&rd.mapping,envMapCubeUVHeight:ad,aoMap:xd,lightMap:bd,bumpMap:wd,normalMap:Ed,displacementMap:Hu&&Md,emissiveMap:Sd,normalMapObjectSpace:Ed&&ys.normalMapType===ut.vyJ,normalMapTangentSpace:Ed&&ys.normalMapType===ut.bI3,metalnessMap:Td,roughnessMap:kd,anisotropy:Cd,anisotropyMap:Nd,clearcoat:Id,clearcoatMap:Rd,clearcoatNormalMap:Od,clearcoatRoughnessMap:Bd,dispersion:Dd,iridescence:Ld,iridescenceMap:Fd,iridescenceThicknessMap:jd,sheen:Pd,sheenColorMap:Ud,sheenRoughnessMap:Vd,specularMap:Gd,specularColorMap:Hd,specularIntensityMap:Wd,transmission:zd,transmissionMap:qd,thicknessMap:Zd,gradientMap:Yd,opaque:!1===ys.transparent&&ys.blending===ut.NTi&&!1===ys.alphaToCoverage,alphaMap:Qd,alphaTest:Kd,alphaHash:Xd,combine:ys.combine,mapUv:yd&&getChannel(ys.map.channel),aoMapUv:xd&&getChannel(ys.aoMap.channel),lightMapUv:bd&&getChannel(ys.lightMap.channel),bumpMapUv:wd&&getChannel(ys.bumpMap.channel),normalMapUv:Ed&&getChannel(ys.normalMap.channel),displacementMapUv:Md&&getChannel(ys.displacementMap.channel),emissiveMapUv:Sd&&getChannel(ys.emissiveMap.channel),metalnessMapUv:Td&&getChannel(ys.metalnessMap.channel),roughnessMapUv:kd&&getChannel(ys.roughnessMap.channel),anisotropyMapUv:Nd&&getChannel(ys.anisotropyMap.channel),clearcoatMapUv:Rd&&getChannel(ys.clearcoatMap.channel),clearcoatNormalMapUv:Od&&getChannel(ys.clearcoatNormalMap.channel),clearcoatRoughnessMapUv:Bd&&getChannel(ys.clearcoatRoughnessMap.channel),iridescenceMapUv:Fd&&getChannel(ys.iridescenceMap.channel),iridescenceThicknessMapUv:jd&&getChannel(ys.iridescenceThicknessMap.channel),sheenColorMapUv:Ud&&getChannel(ys.sheenColorMap.channel),sheenRoughnessMapUv:Vd&&getChannel(ys.sheenRoughnessMap.channel),specularMapUv:Gd&&getChannel(ys.specularMap.channel),specularColorMapUv:Hd&&getChannel(ys.specularColorMap.channel),specularIntensityMapUv:Wd&&getChannel(ys.specularIntensityMap.channel),transmissionMapUv:qd&&getChannel(ys.transmissionMap.channel),thicknessMapUv:Zd&&getChannel(ys.thicknessMap.channel),alphaMapUv:Qd&&getChannel(ys.alphaMap.channel),vertexTangents:!!id.attributes.tangent&&(Ed||Cd),vertexColors:ys.vertexColors,vertexAlphas:!0===ys.vertexColors&&!!id.attributes.color&&4===id.attributes.color.itemSize,pointsUvs:!0===ed.isPoints&&!!id.attributes.uv&&(yd||Qd),fog:!!td,useFog:!0===ys.fog,fogExp2:!!td&&td.isFogExp2,flatShading:!0===ys.flatShading&&!1===ys.wireframe,sizeAttenuation:!0===ys.sizeAttenuation,logarithmicDepthBuffer:wu,reversedDepthBuffer:gd,skinning:!0===ed.isSkinnedMesh,morphTargets:void 0!==id.morphAttributes.position,morphNormals:void 0!==id.morphAttributes.normal,morphColors:void 0!==id.morphAttributes.color,morphTargetsCount:ld,morphTextureStride:pd,numDirLights:lu.directional.length,numPointLights:lu.point.length,numSpotLights:lu.spot.length,numSpotLightMaps:lu.spotLightMap.length,numRectAreaLights:lu.rectArea.length,numHemiLights:lu.hemi.length,numDirLightShadows:lu.directionalShadowMap.length,numPointLightShadows:lu.pointShadowMap.length,numSpotLightShadows:lu.spotShadowMap.length,numSpotLightShadowsWithMaps:lu.numSpotLightShadowsWithMaps,numLightProbes:lu.numLightProbes,numClippingPlanes:Ec.numPlanes,numClipIntersection:Ec.numIntersection,dithering:ys.dithering,shadowMapEnabled:ae.shadowMap.enabled&&vu.length>0,shadowMapType:ae.shadowMap.type,toneMapping:$d,decodeVideoTexture:yd&&!0===ys.map.isVideoTexture&&ut.ppV.getTransfer(ys.map.colorSpace)===ut.KLL,decodeVideoTextureEmissive:Sd&&!0===ys.emissiveMap.isVideoTexture&&ut.ppV.getTransfer(ys.emissiveMap.colorSpace)===ut.KLL,premultipliedAlpha:ys.premultipliedAlpha,doubleSided:ys.side===ut.$EB,flipSided:ys.side===ut.hsX,useDepthPacking:ys.depthPacking>=0,depthPacking:ys.depthPacking||0,index0AttributeName:ys.index0AttributeName,extensionClipCullDistance:Jd&&!0===ys.extensions.clipCullDistance&&qt.has("WEBGL_clip_cull_distance"),extensionMultiDraw:(Jd&&!0===ys.extensions.multiDraw||Ad)&&qt.has("WEBGL_multi_draw"),rendererExtensionParallelShaderCompile:qt.has("KHR_parallel_shader_compile"),customProgramCacheKey:ys.customProgramCacheKey()};return Fp.vertexUv1s=_u.has(1),Fp.vertexUv2s=_u.has(2),Fp.vertexUv3s=_u.has(3),_u.clear(),Fp},getProgramCacheKey:function(ue){const nt=[];if(ue.shaderID?nt.push(ue.shaderID):(nt.push(ue.customVertexShaderID),nt.push(ue.customFragmentShaderID)),void 0!==ue.defines)for(const ae in ue.defines)nt.push(ae),nt.push(ue.defines[ae]);return!1===ue.isRawShaderMaterial&&(!function(ae,ue){ae.push(ue.precision),ae.push(ue.outputColorSpace),ae.push(ue.envMapMode),ae.push(ue.envMapCubeUVHeight),ae.push(ue.mapUv),ae.push(ue.alphaMapUv),ae.push(ue.lightMapUv),ae.push(ue.aoMapUv),ae.push(ue.bumpMapUv),ae.push(ue.normalMapUv),ae.push(ue.displacementMapUv),ae.push(ue.emissiveMapUv),ae.push(ue.metalnessMapUv),ae.push(ue.roughnessMapUv),ae.push(ue.anisotropyMapUv),ae.push(ue.clearcoatMapUv),ae.push(ue.clearcoatNormalMapUv),ae.push(ue.clearcoatRoughnessMapUv),ae.push(ue.iridescenceMapUv),ae.push(ue.iridescenceThicknessMapUv),ae.push(ue.sheenColorMapUv),ae.push(ue.sheenRoughnessMapUv),ae.push(ue.specularMapUv),ae.push(ue.specularColorMapUv),ae.push(ue.specularIntensityMapUv),ae.push(ue.transmissionMapUv),ae.push(ue.thicknessMapUv),ae.push(ue.combine),ae.push(ue.fogExp2),ae.push(ue.sizeAttenuation),ae.push(ue.morphTargetsCount),ae.push(ue.morphAttributeCount),ae.push(ue.numDirLights),ae.push(ue.numPointLights),ae.push(ue.numSpotLights),ae.push(ue.numSpotLightMaps),ae.push(ue.numHemiLights),ae.push(ue.numRectAreaLights),ae.push(ue.numDirLightShadows),ae.push(ue.numPointLightShadows),ae.push(ue.numSpotLightShadows),ae.push(ue.numSpotLightShadowsWithMaps),ae.push(ue.numLightProbes),ae.push(ue.shadowMapType),ae.push(ue.toneMapping),ae.push(ue.numClippingPlanes),ae.push(ue.numClipIntersection),ae.push(ue.depthPacking)}(nt,ue),function(ae,ue){lu.disableAll(),ue.supportsVertexTextures&&lu.enable(0);ue.instancing&&lu.enable(1);ue.instancingColor&&lu.enable(2);ue.instancingMorph&&lu.enable(3);ue.matcap&&lu.enable(4);ue.envMap&&lu.enable(5);ue.normalMapObjectSpace&&lu.enable(6);ue.normalMapTangentSpace&&lu.enable(7);ue.clearcoat&&lu.enable(8);ue.iridescence&&lu.enable(9);ue.alphaTest&&lu.enable(10);ue.vertexColors&&lu.enable(11);ue.vertexAlphas&&lu.enable(12);ue.vertexUv1s&&lu.enable(13);ue.vertexUv2s&&lu.enable(14);ue.vertexUv3s&&lu.enable(15);ue.vertexTangents&&lu.enable(16);ue.anisotropy&&lu.enable(17);ue.alphaHash&&lu.enable(18);ue.batching&&lu.enable(19);ue.dispersion&&lu.enable(20);ue.batchingColor&&lu.enable(21);ue.gradientMap&&lu.enable(22);ae.push(lu.mask),lu.disableAll(),ue.fog&&lu.enable(0);ue.useFog&&lu.enable(1);ue.flatShading&&lu.enable(2);ue.logarithmicDepthBuffer&&lu.enable(3);ue.reversedDepthBuffer&&lu.enable(4);ue.skinning&&lu.enable(5);ue.morphTargets&&lu.enable(6);ue.morphNormals&&lu.enable(7);ue.morphColors&&lu.enable(8);ue.premultipliedAlpha&&lu.enable(9);ue.shadowMapEnabled&&lu.enable(10);ue.doubleSided&&lu.enable(11);ue.flipSided&&lu.enable(12);ue.useDepthPacking&&lu.enable(13);ue.dithering&&lu.enable(14);ue.transmission&&lu.enable(15);ue.sheen&&lu.enable(16);ue.opaque&&lu.enable(17);ue.pointsUvs&&lu.enable(18);ue.decodeVideoTexture&&lu.enable(19);ue.decodeVideoTextureEmissive&&lu.enable(20);ue.alphaToCoverage&&lu.enable(21);ae.push(lu.mask)}(nt,ue),nt.push(ae.outputColorSpace)),nt.push(ue.customProgramCacheKey),nt.join()},getUniforms:function(ae){const ue=Ju[ae.type];let nt;if(ue){const ae=Xt[ue];nt=ut.LlO.clone(ae.uniforms)}else nt=ae.uniforms;return nt},acquireProgram:function(ue,nt){let ut;for(let ae=0,qt=vu.length;ae<qt;ae++){const ue=vu[ae];if(ue.cacheKey===nt){ut=ue,++ut.usedTimes;break}}return void 0===ut&&(ut=new WebGLProgram(ae,nt,ue,ys),vu.push(ut)),ut},releaseProgram:function(ae){if(0===--ae.usedTimes){const ue=vu.indexOf(ae);vu[ue]=vu[vu.length-1],vu.pop(),ae.destroy()}},releaseShaderCache:function(ae){uu.remove(ae)},programs:vu,dispose:function(){uu.dispose()}}}function WebGLProperties(){let ae=new WeakMap;return{has:function(ue){return ae.has(ue)},get:function(ue){let nt=ae.get(ue);return void 0===nt&&(nt={},ae.set(ue,nt)),nt},remove:function(ue){ae.delete(ue)},update:function(ue,nt,ut){ae.get(ue)[nt]=ut},dispose:function(){ae=new WeakMap}}}function painterSortStable(ae,ue){return ae.groupOrder!==ue.groupOrder?ae.groupOrder-ue.groupOrder:ae.renderOrder!==ue.renderOrder?ae.renderOrder-ue.renderOrder:ae.material.id!==ue.material.id?ae.material.id-ue.material.id:ae.z!==ue.z?ae.z-ue.z:ae.id-ue.id}function reversePainterSortStable(ae,ue){return ae.groupOrder!==ue.groupOrder?ae.groupOrder-ue.groupOrder:ae.renderOrder!==ue.renderOrder?ae.renderOrder-ue.renderOrder:ae.z!==ue.z?ue.z-ae.z:ae.id-ue.id}function WebGLRenderList(){const ae=[];let ue=0;const nt=[],ut=[],qt=[];function getNextRenderItem(nt,ut,qt,Yt,Xt,ys){let Ec=ae[ue];return void 0===Ec?(Ec={id:nt.id,object:nt,geometry:ut,material:qt,groupOrder:Yt,renderOrder:nt.renderOrder,z:Xt,group:ys},ae[ue]=Ec):(Ec.id=nt.id,Ec.object=nt,Ec.geometry=ut,Ec.material=qt,Ec.groupOrder=Yt,Ec.renderOrder=nt.renderOrder,Ec.z=Xt,Ec.group=ys),ue++,Ec}return{opaque:nt,transmissive:ut,transparent:qt,init:function(){ue=0,nt.length=0,ut.length=0,qt.length=0},push:function(ae,ue,Yt,Xt,ys,Ec){const lu=getNextRenderItem(ae,ue,Yt,Xt,ys,Ec);Yt.transmission>0?ut.push(lu):!0===Yt.transparent?qt.push(lu):nt.push(lu)},unshift:function(ae,ue,Yt,Xt,ys,Ec){const lu=getNextRenderItem(ae,ue,Yt,Xt,ys,Ec);Yt.transmission>0?ut.unshift(lu):!0===Yt.transparent?qt.unshift(lu):nt.unshift(lu)},finish:function(){for(let nt=ue,ut=ae.length;nt<ut;nt++){const ue=ae[nt];if(null===ue.id)break;ue.id=null,ue.object=null,ue.geometry=null,ue.material=null,ue.group=null}},sort:function(ae,ue){nt.length>1&&nt.sort(ae||painterSortStable),ut.length>1&&ut.sort(ue||reversePainterSortStable),qt.length>1&&qt.sort(ue||reversePainterSortStable)}}}function WebGLRenderLists(){let ae=new WeakMap;return{get:function(ue,nt){const ut=ae.get(ue);let qt;return void 0===ut?(qt=new WebGLRenderList,ae.set(ue,[qt])):nt>=ut.length?(qt=new WebGLRenderList,ut.push(qt)):qt=ut[nt],qt},dispose:function(){ae=new WeakMap}}}function UniformsCache(){const ae={};return{get:function(ue){if(void 0!==ae[ue.id])return ae[ue.id];let nt;switch(ue.type){case"DirectionalLight":nt={direction:new ut.Pq0,color:new ut.Q1f};break;case"SpotLight":nt={position:new ut.Pq0,direction:new ut.Pq0,color:new ut.Q1f,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":nt={position:new ut.Pq0,color:new ut.Q1f,distance:0,decay:0};break;case"HemisphereLight":nt={direction:new ut.Pq0,skyColor:new ut.Q1f,groundColor:new ut.Q1f};break;case"RectAreaLight":nt={color:new ut.Q1f,position:new ut.Pq0,halfWidth:new ut.Pq0,halfHeight:new ut.Pq0}}return ae[ue.id]=nt,nt}}}let bd=0;function shadowCastingAndTexturingLightsFirst(ae,ue){return(ue.castShadow?2:0)-(ae.castShadow?2:0)+(ue.map?1:0)-(ae.map?1:0)}function WebGLLights(ae){const ue=new UniformsCache,nt=function(){const ae={};return{get:function(ue){if(void 0!==ae[ue.id])return ae[ue.id];let nt;switch(ue.type){case"DirectionalLight":case"SpotLight":nt={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new ut.I9Y};break;case"PointLight":nt={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new ut.I9Y,shadowCameraNear:1,shadowCameraFar:1e3}}return ae[ue.id]=nt,nt}}}(),qt={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1,numSpotMaps:-1,numLightProbes:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotLightMap:[],spotShadow:[],spotShadowMap:[],spotLightMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],numSpotLightShadowsWithMaps:0,numLightProbes:0};for(let Yt=0;Yt<9;Yt++)qt.probe.push(new ut.Pq0);const Xt=new ut.Pq0,ys=new ut.kn4,Ec=new ut.kn4;return{setup:function(ut){let Xt=0,ys=0,Ec=0;for(let ae=0;ae<9;ae++)qt.probe[ae].set(0,0,0);let lu=0,uu=0,_u=0,vu=0,wu=0,Hu=0,qu=0,Ju=0,_h=0,ed=0,td=0;ut.sort(shadowCastingAndTexturingLightsFirst);for(let ae=0,Yt=ut.length;ae<Yt;ae++){const Yt=ut[ae],id=Yt.color,nd=Yt.intensity,rd=Yt.distance,ad=Yt.shadow&&Yt.shadow.map?Yt.shadow.map.texture:null;if(Yt.isAmbientLight)Xt+=id.r*nd,ys+=id.g*nd,Ec+=id.b*nd;else if(Yt.isLightProbe){for(let ae=0;ae<9;ae++)qt.probe[ae].addScaledVector(Yt.sh.coefficients[ae],nd);td++}else if(Yt.isDirectionalLight){const ae=ue.get(Yt);if(ae.color.copy(Yt.color).multiplyScalar(Yt.intensity),Yt.castShadow){const ae=Yt.shadow,ue=nt.get(Yt);ue.shadowIntensity=ae.intensity,ue.shadowBias=ae.bias,ue.shadowNormalBias=ae.normalBias,ue.shadowRadius=ae.radius,ue.shadowMapSize=ae.mapSize,qt.directionalShadow[lu]=ue,qt.directionalShadowMap[lu]=ad,qt.directionalShadowMatrix[lu]=Yt.shadow.matrix,Hu++}qt.directional[lu]=ae,lu++}else if(Yt.isSpotLight){const ae=ue.get(Yt);ae.position.setFromMatrixPosition(Yt.matrixWorld),ae.color.copy(id).multiplyScalar(nd),ae.distance=rd,ae.coneCos=Math.cos(Yt.angle),ae.penumbraCos=Math.cos(Yt.angle*(1-Yt.penumbra)),ae.decay=Yt.decay,qt.spot[_u]=ae;const ut=Yt.shadow;if(Yt.map&&(qt.spotLightMap[_h]=Yt.map,_h++,ut.updateMatrices(Yt),Yt.castShadow&&ed++),qt.spotLightMatrix[_u]=ut.matrix,Yt.castShadow){const ae=nt.get(Yt);ae.shadowIntensity=ut.intensity,ae.shadowBias=ut.bias,ae.shadowNormalBias=ut.normalBias,ae.shadowRadius=ut.radius,ae.shadowMapSize=ut.mapSize,qt.spotShadow[_u]=ae,qt.spotShadowMap[_u]=ad,Ju++}_u++}else if(Yt.isRectAreaLight){const ae=ue.get(Yt);ae.color.copy(id).multiplyScalar(nd),ae.halfWidth.set(.5*Yt.width,0,0),ae.halfHeight.set(0,.5*Yt.height,0),qt.rectArea[vu]=ae,vu++}else if(Yt.isPointLight){const ae=ue.get(Yt);if(ae.color.copy(Yt.color).multiplyScalar(Yt.intensity),ae.distance=Yt.distance,ae.decay=Yt.decay,Yt.castShadow){const ae=Yt.shadow,ue=nt.get(Yt);ue.shadowIntensity=ae.intensity,ue.shadowBias=ae.bias,ue.shadowNormalBias=ae.normalBias,ue.shadowRadius=ae.radius,ue.shadowMapSize=ae.mapSize,ue.shadowCameraNear=ae.camera.near,ue.shadowCameraFar=ae.camera.far,qt.pointShadow[uu]=ue,qt.pointShadowMap[uu]=ad,qt.pointShadowMatrix[uu]=Yt.shadow.matrix,qu++}qt.point[uu]=ae,uu++}else if(Yt.isHemisphereLight){const ae=ue.get(Yt);ae.skyColor.copy(Yt.color).multiplyScalar(nd),ae.groundColor.copy(Yt.groundColor).multiplyScalar(nd),qt.hemi[wu]=ae,wu++}}vu>0&&(!0===ae.has("OES_texture_float_linear")?(qt.rectAreaLTC1=Yt.LTC_FLOAT_1,qt.rectAreaLTC2=Yt.LTC_FLOAT_2):(qt.rectAreaLTC1=Yt.LTC_HALF_1,qt.rectAreaLTC2=Yt.LTC_HALF_2)),qt.ambient[0]=Xt,qt.ambient[1]=ys,qt.ambient[2]=Ec;const id=qt.hash;id.directionalLength===lu&&id.pointLength===uu&&id.spotLength===_u&&id.rectAreaLength===vu&&id.hemiLength===wu&&id.numDirectionalShadows===Hu&&id.numPointShadows===qu&&id.numSpotShadows===Ju&&id.numSpotMaps===_h&&id.numLightProbes===td||(qt.directional.length=lu,qt.spot.length=_u,qt.rectArea.length=vu,qt.point.length=uu,qt.hemi.length=wu,qt.directionalShadow.length=Hu,qt.directionalShadowMap.length=Hu,qt.pointShadow.length=qu,qt.pointShadowMap.length=qu,qt.spotShadow.length=Ju,qt.spotShadowMap.length=Ju,qt.directionalShadowMatrix.length=Hu,qt.pointShadowMatrix.length=qu,qt.spotLightMatrix.length=Ju+_h-ed,qt.spotLightMap.length=_h,qt.numSpotLightShadowsWithMaps=ed,qt.numLightProbes=td,id.directionalLength=lu,id.pointLength=uu,id.spotLength=_u,id.rectAreaLength=vu,id.hemiLength=wu,id.numDirectionalShadows=Hu,id.numPointShadows=qu,id.numSpotShadows=Ju,id.numSpotMaps=_h,id.numLightProbes=td,qt.version=bd++)},setupView:function(ae,ue){let nt=0,ut=0,Yt=0,lu=0,uu=0;const _u=ue.matrixWorldInverse;for(let vu=0,wu=ae.length;vu<wu;vu++){const ue=ae[vu];if(ue.isDirectionalLight){const ae=qt.directional[nt];ae.direction.setFromMatrixPosition(ue.matrixWorld),Xt.setFromMatrixPosition(ue.target.matrixWorld),ae.direction.sub(Xt),ae.direction.transformDirection(_u),nt++}else if(ue.isSpotLight){const ae=qt.spot[Yt];ae.position.setFromMatrixPosition(ue.matrixWorld),ae.position.applyMatrix4(_u),ae.direction.setFromMatrixPosition(ue.matrixWorld),Xt.setFromMatrixPosition(ue.target.matrixWorld),ae.direction.sub(Xt),ae.direction.transformDirection(_u),Yt++}else if(ue.isRectAreaLight){const ae=qt.rectArea[lu];ae.position.setFromMatrixPosition(ue.matrixWorld),ae.position.applyMatrix4(_u),Ec.identity(),ys.copy(ue.matrixWorld),ys.premultiply(_u),Ec.extractRotation(ys),ae.halfWidth.set(.5*ue.width,0,0),ae.halfHeight.set(0,.5*ue.height,0),ae.halfWidth.applyMatrix4(Ec),ae.halfHeight.applyMatrix4(Ec),lu++}else if(ue.isPointLight){const ae=qt.point[ut];ae.position.setFromMatrixPosition(ue.matrixWorld),ae.position.applyMatrix4(_u),ut++}else if(ue.isHemisphereLight){const ae=qt.hemi[uu];ae.direction.setFromMatrixPosition(ue.matrixWorld),ae.direction.transformDirection(_u),uu++}}},state:qt}}function WebGLRenderState(ae){const ue=new WebGLLights(ae),nt=[],ut=[];const qt={lightsArray:nt,shadowsArray:ut,camera:null,lights:ue,transmissionRenderTarget:{}};return{init:function(ae){qt.camera=ae,nt.length=0,ut.length=0},state:qt,setupLights:function(){ue.setup(nt)},setupLightsView:function(ae){ue.setupView(nt,ae)},pushLight:function(ae){nt.push(ae)},pushShadow:function(ae){ut.push(ae)}}}function WebGLRenderStates(ae){let ue=new WeakMap;return{get:function(nt,ut){void 0===ut&&(ut=0);const qt=ue.get(nt);let Yt;return void 0===qt?(Yt=new WebGLRenderState(ae),ue.set(nt,[Yt])):ut>=qt.length?(Yt=new WebGLRenderState(ae),qt.push(Yt)):Yt=qt[ut],Yt},dispose:function(){ue=new WeakMap}}}function WebGLShadowMap(ae,ue,nt){let qt=new ut.PPD;const Yt=new ut.I9Y,Xt=new ut.I9Y,ys=new ut.IUQ,Ec=new ut.CSG({depthPacking:ut.N5j}),lu=new ut.aVO,uu={},_u=nt.maxTextureSize,vu={[ut.hB5]:ut.hsX,[ut.hsX]:ut.hB5,[ut.$EB]:ut.$EB},wu=new ut.BKk({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new ut.I9Y},radius:{value:4}},vertexShader:"void main() {\n\tgl_Position = vec4( position, 1.0 );\n}",fragmentShader:"uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include <packing>\nvoid main() {\n\tconst float samples = float( VSM_SAMPLES );\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\n\tfloat uvStart = samples <= 1.0 ? 0.0 : - 1.0;\n\tfor ( float i = 0.0; i < samples; i ++ ) {\n\t\tfloat uvOffset = uvStart + i * uvStride;\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean / samples;\n\tsquared_mean = squared_mean / samples;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"}),Hu=wu.clone();Hu.defines.HORIZONTAL_PASS=1;const qu=new ut.LoY;qu.setAttribute("position",new ut.THS(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const Ju=new ut.eaF(qu,wu),_h=this;this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=ut.QP0;let ed=this.type;function VSMPass(nt,qt){const Xt=ue.update(Ju);wu.defines.VSM_SAMPLES!==nt.blurSamples&&(wu.defines.VSM_SAMPLES=nt.blurSamples,Hu.defines.VSM_SAMPLES=nt.blurSamples,wu.needsUpdate=!0,Hu.needsUpdate=!0),null===nt.mapPass&&(nt.mapPass=new ut.nWS(Yt.x,Yt.y)),wu.uniforms.shadow_pass.value=nt.map.texture,wu.uniforms.resolution.value=nt.mapSize,wu.uniforms.radius.value=nt.radius,ae.setRenderTarget(nt.mapPass),ae.clear(),ae.renderBufferDirect(qt,null,Xt,wu,Ju,null),Hu.uniforms.shadow_pass.value=nt.mapPass.texture,Hu.uniforms.resolution.value=nt.mapSize,Hu.uniforms.radius.value=nt.radius,ae.setRenderTarget(nt.map),ae.clear(),ae.renderBufferDirect(qt,null,Xt,Hu,Ju,null)}function getDepthMaterial(ue,nt,qt,Yt){let Xt=null;const ys=!0===qt.isPointLight?ue.customDistanceMaterial:ue.customDepthMaterial;if(void 0!==ys)Xt=ys;else if(Xt=!0===qt.isPointLight?lu:Ec,ae.localClippingEnabled&&!0===nt.clipShadows&&Array.isArray(nt.clippingPlanes)&&0!==nt.clippingPlanes.length||nt.displacementMap&&0!==nt.displacementScale||nt.alphaMap&&nt.alphaTest>0||nt.map&&nt.alphaTest>0||!0===nt.alphaToCoverage){const ae=Xt.uuid,ue=nt.uuid;let ut=uu[ae];void 0===ut&&(ut={},uu[ae]=ut);let qt=ut[ue];void 0===qt&&(qt=Xt.clone(),ut[ue]=qt,nt.addEventListener("dispose",onMaterialDispose)),Xt=qt}if(Xt.visible=nt.visible,Xt.wireframe=nt.wireframe,Yt===ut.RyA?Xt.side=null!==nt.shadowSide?nt.shadowSide:nt.side:Xt.side=null!==nt.shadowSide?nt.shadowSide:vu[nt.side],Xt.alphaMap=nt.alphaMap,Xt.alphaTest=!0===nt.alphaToCoverage?.5:nt.alphaTest,Xt.map=nt.map,Xt.clipShadows=nt.clipShadows,Xt.clippingPlanes=nt.clippingPlanes,Xt.clipIntersection=nt.clipIntersection,Xt.displacementMap=nt.displacementMap,Xt.displacementScale=nt.displacementScale,Xt.displacementBias=nt.displacementBias,Xt.wireframeLinewidth=nt.wireframeLinewidth,Xt.linewidth=nt.linewidth,!0===qt.isPointLight&&!0===Xt.isMeshDistanceMaterial){ae.properties.get(Xt).light=qt}return Xt}function renderObject(nt,Yt,Xt,ys,Ec){if(!1===nt.visible)return;if(nt.layers.test(Yt.layers)&&(nt.isMesh||nt.isLine||nt.isPoints)&&(nt.castShadow||nt.receiveShadow&&Ec===ut.RyA)&&(!nt.frustumCulled||qt.intersectsObject(nt))){nt.modelViewMatrix.multiplyMatrices(Xt.matrixWorldInverse,nt.matrixWorld);const ut=ue.update(nt),qt=nt.material;if(Array.isArray(qt)){const ue=ut.groups;for(let lu=0,uu=ue.length;lu<uu;lu++){const uu=ue[lu],_u=qt[uu.materialIndex];if(_u&&_u.visible){const ue=getDepthMaterial(nt,_u,ys,Ec);nt.onBeforeShadow(ae,nt,Yt,Xt,ut,ue,uu),ae.renderBufferDirect(Xt,null,ut,ue,nt,uu),nt.onAfterShadow(ae,nt,Yt,Xt,ut,ue,uu)}}}else if(qt.visible){const ue=getDepthMaterial(nt,qt,ys,Ec);nt.onBeforeShadow(ae,nt,Yt,Xt,ut,ue,null),ae.renderBufferDirect(Xt,null,ut,ue,nt,null),nt.onAfterShadow(ae,nt,Yt,Xt,ut,ue,null)}}const lu=nt.children;for(let ae=0,ue=lu.length;ae<ue;ae++)renderObject(lu[ae],Yt,Xt,ys,Ec)}function onMaterialDispose(ae){ae.target.removeEventListener("dispose",onMaterialDispose);for(const ue in uu){const nt=uu[ue],ut=ae.target.uuid;if(ut in nt){nt[ut].dispose(),delete nt[ut]}}}this.render=function(ue,nt,Ec){if(!1===_h.enabled)return;if(!1===_h.autoUpdate&&!1===_h.needsUpdate)return;if(0===ue.length)return;const lu=ae.getRenderTarget(),uu=ae.getActiveCubeFace(),vu=ae.getActiveMipmapLevel(),wu=ae.state;wu.setBlending(ut.XIg),wu.buffers.depth.getReversed()?wu.buffers.color.setClear(0,0,0,0):wu.buffers.color.setClear(1,1,1,1),wu.buffers.depth.setTest(!0),wu.setScissorTest(!1);const Hu=ed!==ut.RyA&&this.type===ut.RyA,qu=ed===ut.RyA&&this.type!==ut.RyA;for(let Ju=0,_h=ue.length;Ju<_h;Ju++){const lu=ue[Ju],uu=lu.shadow;if(void 0===uu){console.warn("THREE.WebGLShadowMap:",lu,"has no shadow.");continue}if(!1===uu.autoUpdate&&!1===uu.needsUpdate)continue;Yt.copy(uu.mapSize);const vu=uu.getFrameExtents();if(Yt.multiply(vu),Xt.copy(uu.mapSize),(Yt.x>_u||Yt.y>_u)&&(Yt.x>_u&&(Xt.x=Math.floor(_u/vu.x),Yt.x=Xt.x*vu.x,uu.mapSize.x=Xt.x),Yt.y>_u&&(Xt.y=Math.floor(_u/vu.y),Yt.y=Xt.y*vu.y,uu.mapSize.y=Xt.y)),null===uu.map||!0===Hu||!0===qu){const ae=this.type!==ut.RyA?{minFilter:ut.hxR,magFilter:ut.hxR}:{};null!==uu.map&&uu.map.dispose(),uu.map=new ut.nWS(Yt.x,Yt.y,ae),uu.map.texture.name=lu.name+".shadowMap",uu.camera.updateProjectionMatrix()}ae.setRenderTarget(uu.map),ae.clear();const _h=uu.getViewportCount();for(let ae=0;ae<_h;ae++){const ue=uu.getViewport(ae);ys.set(Xt.x*ue.x,Xt.y*ue.y,Xt.x*ue.z,Xt.y*ue.w),wu.viewport(ys),uu.updateMatrices(lu,ae),qt=uu.getFrustum(),renderObject(nt,Ec,uu.camera,lu,this.type)}!0!==uu.isPointLightShadow&&this.type===ut.RyA&&VSMPass(uu,Ec),uu.needsUpdate=!1}ed=this.type,_h.needsUpdate=!1,ae.setRenderTarget(lu,uu,vu)}}const wd={[ut.eHc]:ut.lGu,[ut.brA]:ut.K52,[ut.U3G]:ut.bw0,[ut.xSv]:ut.Gwm,[ut.lGu]:ut.eHc,[ut.K52]:ut.brA,[ut.bw0]:ut.U3G,[ut.Gwm]:ut.xSv};function WebGLState(ae,ue){const nt=new function(){let ue=!1;const nt=new ut.IUQ;let qt=null;const Yt=new ut.IUQ(0,0,0,0);return{setMask:function(nt){qt===nt||ue||(ae.colorMask(nt,nt,nt,nt),qt=nt)},setLocked:function(ae){ue=ae},setClear:function(ue,ut,qt,Xt,ys){!0===ys&&(ue*=Xt,ut*=Xt,qt*=Xt),nt.set(ue,ut,qt,Xt),!1===Yt.equals(nt)&&(ae.clearColor(ue,ut,qt,Xt),Yt.copy(nt))},reset:function(){ue=!1,qt=null,Yt.set(-1,0,0,0)}}},qt=new function(){let nt=!1,qt=!1,Yt=null,Xt=null,ys=null;return{setReversed:function(ae){if(qt!==ae){const nt=ue.get("EXT_clip_control");ae?nt.clipControlEXT(nt.LOWER_LEFT_EXT,nt.ZERO_TO_ONE_EXT):nt.clipControlEXT(nt.LOWER_LEFT_EXT,nt.NEGATIVE_ONE_TO_ONE_EXT),qt=ae;const ut=ys;ys=null,this.setClear(ut)}},getReversed:function(){return qt},setTest:function(ue){ue?enable(ae.DEPTH_TEST):disable(ae.DEPTH_TEST)},setMask:function(ue){Yt===ue||nt||(ae.depthMask(ue),Yt=ue)},setFunc:function(ue){if(qt&&(ue=wd[ue]),Xt!==ue){switch(ue){case ut.eHc:ae.depthFunc(ae.NEVER);break;case ut.lGu:ae.depthFunc(ae.ALWAYS);break;case ut.brA:ae.depthFunc(ae.LESS);break;case ut.xSv:ae.depthFunc(ae.LEQUAL);break;case ut.U3G:ae.depthFunc(ae.EQUAL);break;case ut.Gwm:ae.depthFunc(ae.GEQUAL);break;case ut.K52:ae.depthFunc(ae.GREATER);break;case ut.bw0:ae.depthFunc(ae.NOTEQUAL);break;default:ae.depthFunc(ae.LEQUAL)}Xt=ue}},setLocked:function(ae){nt=ae},setClear:function(ue){ys!==ue&&(qt&&(ue=1-ue),ae.clearDepth(ue),ys=ue)},reset:function(){nt=!1,Yt=null,Xt=null,ys=null,qt=!1}}},Yt=new function(){let ue=!1,nt=null,ut=null,qt=null,Yt=null,Xt=null,ys=null,Ec=null,lu=null;return{setTest:function(nt){ue||(nt?enable(ae.STENCIL_TEST):disable(ae.STENCIL_TEST))},setMask:function(ut){nt===ut||ue||(ae.stencilMask(ut),nt=ut)},setFunc:function(ue,nt,Xt){ut===ue&&qt===nt&&Yt===Xt||(ae.stencilFunc(ue,nt,Xt),ut=ue,qt=nt,Yt=Xt)},setOp:function(ue,nt,ut){Xt===ue&&ys===nt&&Ec===ut||(ae.stencilOp(ue,nt,ut),Xt=ue,ys=nt,Ec=ut)},setLocked:function(ae){ue=ae},setClear:function(ue){lu!==ue&&(ae.clearStencil(ue),lu=ue)},reset:function(){ue=!1,nt=null,ut=null,qt=null,Yt=null,Xt=null,ys=null,Ec=null,lu=null}}},Xt=new WeakMap,ys=new WeakMap;let Ec={},lu={},uu=new WeakMap,_u=[],vu=null,wu=!1,Hu=null,qu=null,Ju=null,_h=null,ed=null,td=null,id=null,nd=new ut.Q1f(0,0,0),rd=0,ad=!1,sd=null,od=null,ld=null,cd=null,ud=null;const hd=ae.getParameter(ae.MAX_COMBINED_TEXTURE_IMAGE_UNITS);let dd=!1,pd=0;const md=ae.getParameter(ae.VERSION);-1!==md.indexOf("WebGL")?(pd=parseFloat(/^WebGL (\d)/.exec(md)[1]),dd=pd>=1):-1!==md.indexOf("OpenGL ES")&&(pd=parseFloat(/^OpenGL ES (\d)/.exec(md)[1]),dd=pd>=2);let gd=null,fd={};const Ad=ae.getParameter(ae.SCISSOR_BOX),yd=ae.getParameter(ae.VIEWPORT),_d=(new ut.IUQ).fromArray(Ad),vd=(new ut.IUQ).fromArray(yd);function createTexture(ue,nt,ut,qt){const Yt=new Uint8Array(4),Xt=ae.createTexture();ae.bindTexture(ue,Xt),ae.texParameteri(ue,ae.TEXTURE_MIN_FILTER,ae.NEAREST),ae.texParameteri(ue,ae.TEXTURE_MAG_FILTER,ae.NEAREST);for(let ys=0;ys<ut;ys++)ue===ae.TEXTURE_3D||ue===ae.TEXTURE_2D_ARRAY?ae.texImage3D(nt,0,ae.RGBA,1,1,qt,0,ae.RGBA,ae.UNSIGNED_BYTE,Yt):ae.texImage2D(nt+ys,0,ae.RGBA,1,1,0,ae.RGBA,ae.UNSIGNED_BYTE,Yt);return Xt}const xd={};function enable(ue){!0!==Ec[ue]&&(ae.enable(ue),Ec[ue]=!0)}function disable(ue){!1!==Ec[ue]&&(ae.disable(ue),Ec[ue]=!1)}xd[ae.TEXTURE_2D]=createTexture(ae.TEXTURE_2D,ae.TEXTURE_2D,1),xd[ae.TEXTURE_CUBE_MAP]=createTexture(ae.TEXTURE_CUBE_MAP,ae.TEXTURE_CUBE_MAP_POSITIVE_X,6),xd[ae.TEXTURE_2D_ARRAY]=createTexture(ae.TEXTURE_2D_ARRAY,ae.TEXTURE_2D_ARRAY,1,1),xd[ae.TEXTURE_3D]=createTexture(ae.TEXTURE_3D,ae.TEXTURE_3D,1,1),nt.setClear(0,0,0,1),qt.setClear(1),Yt.setClear(0),enable(ae.DEPTH_TEST),qt.setFunc(ut.xSv),setFlipSided(!1),setCullFace(ut.Vb5),enable(ae.CULL_FACE),setBlending(ut.XIg);const bd={[ut.gO9]:ae.FUNC_ADD,[ut.FXf]:ae.FUNC_SUBTRACT,[ut.nST]:ae.FUNC_REVERSE_SUBTRACT};bd[ut.znC]=ae.MIN,bd[ut.$ei]=ae.MAX;const Ed={[ut.ojh]:ae.ZERO,[ut.qad]:ae.ONE,[ut.f4X]:ae.SRC_COLOR,[ut.ie2]:ae.SRC_ALPHA,[ut.hgQ]:ae.SRC_ALPHA_SATURATE,[ut.wn6]:ae.DST_COLOR,[ut.hdd]:ae.DST_ALPHA,[ut.LiQ]:ae.ONE_MINUS_SRC_COLOR,[ut.OuU]:ae.ONE_MINUS_SRC_ALPHA,[ut.aEY]:ae.ONE_MINUS_DST_COLOR,[ut.Nt7]:ae.ONE_MINUS_DST_ALPHA,[ut.RrE]:ae.CONSTANT_COLOR,[ut.$Yl]:ae.ONE_MINUS_CONSTANT_COLOR,[ut.e0p]:ae.CONSTANT_ALPHA,[ut.ov9]:ae.ONE_MINUS_CONSTANT_ALPHA};function setBlending(ue,nt,qt,Yt,Xt,ys,Ec,lu,uu,_u){if(ue!==ut.XIg){if(!1===wu&&(enable(ae.BLEND),wu=!0),ue===ut.bCz)Xt=Xt||nt,ys=ys||qt,Ec=Ec||Yt,nt===qu&&Xt===ed||(ae.blendEquationSeparate(bd[nt],bd[Xt]),qu=nt,ed=Xt),qt===Ju&&Yt===_h&&ys===td&&Ec===id||(ae.blendFuncSeparate(Ed[qt],Ed[Yt],Ed[ys],Ed[Ec]),Ju=qt,_h=Yt,td=ys,id=Ec),!1!==lu.equals(nd)&&uu===rd||(ae.blendColor(lu.r,lu.g,lu.b,uu),nd.copy(lu),rd=uu),Hu=ue,ad=!1;else if(ue!==Hu||_u!==ad){if(qu===ut.gO9&&ed===ut.gO9||(ae.blendEquation(ae.FUNC_ADD),qu=ut.gO9,ed=ut.gO9),_u)switch(ue){case ut.NTi:ae.blendFuncSeparate(ae.ONE,ae.ONE_MINUS_SRC_ALPHA,ae.ONE,ae.ONE_MINUS_SRC_ALPHA);break;case ut.EZo:ae.blendFunc(ae.ONE,ae.ONE);break;case ut.Kwu:ae.blendFuncSeparate(ae.ZERO,ae.ONE_MINUS_SRC_COLOR,ae.ZERO,ae.ONE);break;case ut.EdD:ae.blendFuncSeparate(ae.DST_COLOR,ae.ONE_MINUS_SRC_ALPHA,ae.ZERO,ae.ONE);break;default:console.error("THREE.WebGLState: Invalid blending: ",ue)}else switch(ue){case ut.NTi:ae.blendFuncSeparate(ae.SRC_ALPHA,ae.ONE_MINUS_SRC_ALPHA,ae.ONE,ae.ONE_MINUS_SRC_ALPHA);break;case ut.EZo:ae.blendFuncSeparate(ae.SRC_ALPHA,ae.ONE,ae.ONE,ae.ONE);break;case ut.Kwu:console.error("THREE.WebGLState: SubtractiveBlending requires material.premultipliedAlpha = true");break;case ut.EdD:console.error("THREE.WebGLState: MultiplyBlending requires material.premultipliedAlpha = true");break;default:console.error("THREE.WebGLState: Invalid blending: ",ue)}Ju=null,_h=null,td=null,id=null,nd.set(0,0,0),rd=0,Hu=ue,ad=_u}}else!0===wu&&(disable(ae.BLEND),wu=!1)}function setFlipSided(ue){sd!==ue&&(ue?ae.frontFace(ae.CW):ae.frontFace(ae.CCW),sd=ue)}function setCullFace(ue){ue!==ut.WNZ?(enable(ae.CULL_FACE),ue!==od&&(ue===ut.Vb5?ae.cullFace(ae.BACK):ue===ut.Jnc?ae.cullFace(ae.FRONT):ae.cullFace(ae.FRONT_AND_BACK))):disable(ae.CULL_FACE),od=ue}function setPolygonOffset(ue,nt,ut){ue?(enable(ae.POLYGON_OFFSET_FILL),cd===nt&&ud===ut||(ae.polygonOffset(nt,ut),cd=nt,ud=ut)):disable(ae.POLYGON_OFFSET_FILL)}return{buffers:{color:nt,depth:qt,stencil:Yt},enable:enable,disable:disable,bindFramebuffer:function(ue,nt){return lu[ue]!==nt&&(ae.bindFramebuffer(ue,nt),lu[ue]=nt,ue===ae.DRAW_FRAMEBUFFER&&(lu[ae.FRAMEBUFFER]=nt),ue===ae.FRAMEBUFFER&&(lu[ae.DRAW_FRAMEBUFFER]=nt),!0)},drawBuffers:function(ue,nt){let ut=_u,qt=!1;if(ue){ut=uu.get(nt),void 0===ut&&(ut=[],uu.set(nt,ut));const Yt=ue.textures;if(ut.length!==Yt.length||ut[0]!==ae.COLOR_ATTACHMENT0){for(let ue=0,nt=Yt.length;ue<nt;ue++)ut[ue]=ae.COLOR_ATTACHMENT0+ue;ut.length=Yt.length,qt=!0}}else ut[0]!==ae.BACK&&(ut[0]=ae.BACK,qt=!0);qt&&ae.drawBuffers(ut)},useProgram:function(ue){return vu!==ue&&(ae.useProgram(ue),vu=ue,!0)},setBlending:setBlending,setMaterial:function(ue,Xt){ue.side===ut.$EB?disable(ae.CULL_FACE):enable(ae.CULL_FACE);let ys=ue.side===ut.hsX;Xt&&(ys=!ys),setFlipSided(ys),ue.blending===ut.NTi&&!1===ue.transparent?setBlending(ut.XIg):setBlending(ue.blending,ue.blendEquation,ue.blendSrc,ue.blendDst,ue.blendEquationAlpha,ue.blendSrcAlpha,ue.blendDstAlpha,ue.blendColor,ue.blendAlpha,ue.premultipliedAlpha),qt.setFunc(ue.depthFunc),qt.setTest(ue.depthTest),qt.setMask(ue.depthWrite),nt.setMask(ue.colorWrite);const Ec=ue.stencilWrite;Yt.setTest(Ec),Ec&&(Yt.setMask(ue.stencilWriteMask),Yt.setFunc(ue.stencilFunc,ue.stencilRef,ue.stencilFuncMask),Yt.setOp(ue.stencilFail,ue.stencilZFail,ue.stencilZPass)),setPolygonOffset(ue.polygonOffset,ue.polygonOffsetFactor,ue.polygonOffsetUnits),!0===ue.alphaToCoverage?enable(ae.SAMPLE_ALPHA_TO_COVERAGE):disable(ae.SAMPLE_ALPHA_TO_COVERAGE)},setFlipSided:setFlipSided,setCullFace:setCullFace,setLineWidth:function(ue){ue!==ld&&(dd&&ae.lineWidth(ue),ld=ue)},setPolygonOffset:setPolygonOffset,setScissorTest:function(ue){ue?enable(ae.SCISSOR_TEST):disable(ae.SCISSOR_TEST)},activeTexture:function(ue){void 0===ue&&(ue=ae.TEXTURE0+hd-1),gd!==ue&&(ae.activeTexture(ue),gd=ue)},bindTexture:function(ue,nt,ut){void 0===ut&&(ut=null===gd?ae.TEXTURE0+hd-1:gd);let qt=fd[ut];void 0===qt&&(qt={type:void 0,texture:void 0},fd[ut]=qt),qt.type===ue&&qt.texture===nt||(gd!==ut&&(ae.activeTexture(ut),gd=ut),ae.bindTexture(ue,nt||xd[ue]),qt.type=ue,qt.texture=nt)},unbindTexture:function(){const ue=fd[gd];void 0!==ue&&void 0!==ue.type&&(ae.bindTexture(ue.type,null),ue.type=void 0,ue.texture=void 0)},compressedTexImage2D:function(){try{ae.compressedTexImage2D(...arguments)}catch(ue){console.error("THREE.WebGLState:",ue)}},compressedTexImage3D:function(){try{ae.compressedTexImage3D(...arguments)}catch(ue){console.error("THREE.WebGLState:",ue)}},texImage2D:function(){try{ae.texImage2D(...arguments)}catch(ue){console.error("THREE.WebGLState:",ue)}},texImage3D:function(){try{ae.texImage3D(...arguments)}catch(ue){console.error("THREE.WebGLState:",ue)}},updateUBOMapping:function(ue,nt){let ut=ys.get(nt);void 0===ut&&(ut=new WeakMap,ys.set(nt,ut));let qt=ut.get(ue);void 0===qt&&(qt=ae.getUniformBlockIndex(nt,ue.name),ut.set(ue,qt))},uniformBlockBinding:function(ue,nt){const ut=ys.get(nt).get(ue);Xt.get(nt)!==ut&&(ae.uniformBlockBinding(nt,ut,ue.__bindingPointIndex),Xt.set(nt,ut))},texStorage2D:function(){try{ae.texStorage2D(...arguments)}catch(ue){console.error("THREE.WebGLState:",ue)}},texStorage3D:function(){try{ae.texStorage3D(...arguments)}catch(ue){console.error("THREE.WebGLState:",ue)}},texSubImage2D:function(){try{ae.texSubImage2D(...arguments)}catch(ue){console.error("THREE.WebGLState:",ue)}},texSubImage3D:function(){try{ae.texSubImage3D(...arguments)}catch(ue){console.error("THREE.WebGLState:",ue)}},compressedTexSubImage2D:function(){try{ae.compressedTexSubImage2D(...arguments)}catch(ue){console.error("THREE.WebGLState:",ue)}},compressedTexSubImage3D:function(){try{ae.compressedTexSubImage3D(...arguments)}catch(ue){console.error("THREE.WebGLState:",ue)}},scissor:function(ue){!1===_d.equals(ue)&&(ae.scissor(ue.x,ue.y,ue.z,ue.w),_d.copy(ue))},viewport:function(ue){!1===vd.equals(ue)&&(ae.viewport(ue.x,ue.y,ue.z,ue.w),vd.copy(ue))},reset:function(){ae.disable(ae.BLEND),ae.disable(ae.CULL_FACE),ae.disable(ae.DEPTH_TEST),ae.disable(ae.POLYGON_OFFSET_FILL),ae.disable(ae.SCISSOR_TEST),ae.disable(ae.STENCIL_TEST),ae.disable(ae.SAMPLE_ALPHA_TO_COVERAGE),ae.blendEquation(ae.FUNC_ADD),ae.blendFunc(ae.ONE,ae.ZERO),ae.blendFuncSeparate(ae.ONE,ae.ZERO,ae.ONE,ae.ZERO),ae.blendColor(0,0,0,0),ae.colorMask(!0,!0,!0,!0),ae.clearColor(0,0,0,0),ae.depthMask(!0),ae.depthFunc(ae.LESS),qt.setReversed(!1),ae.clearDepth(1),ae.stencilMask(4294967295),ae.stencilFunc(ae.ALWAYS,0,4294967295),ae.stencilOp(ae.KEEP,ae.KEEP,ae.KEEP),ae.clearStencil(0),ae.cullFace(ae.BACK),ae.frontFace(ae.CCW),ae.polygonOffset(0,0),ae.activeTexture(ae.TEXTURE0),ae.bindFramebuffer(ae.FRAMEBUFFER,null),ae.bindFramebuffer(ae.DRAW_FRAMEBUFFER,null),ae.bindFramebuffer(ae.READ_FRAMEBUFFER,null),ae.useProgram(null),ae.lineWidth(1),ae.scissor(0,0,ae.canvas.width,ae.canvas.height),ae.viewport(0,0,ae.canvas.width,ae.canvas.height),Ec={},gd=null,fd={},lu={},uu=new WeakMap,_u=[],vu=null,wu=!1,Hu=null,qu=null,Ju=null,_h=null,ed=null,td=null,id=null,nd=new ut.Q1f(0,0,0),rd=0,ad=!1,sd=null,od=null,ld=null,cd=null,ud=null,_d.set(0,0,ae.canvas.width,ae.canvas.height),vd.set(0,0,ae.canvas.width,ae.canvas.height),nt.reset(),qt.reset(),Yt.reset()}}}function WebGLTextures(ae,ue,nt,qt,Yt,Xt,ys){const Ec=ue.has("WEBGL_multisampled_render_to_texture")?ue.get("WEBGL_multisampled_render_to_texture"):null,lu="undefined"!==typeof navigator&&/OculusBrowser/g.test(navigator.userAgent),uu=new ut.I9Y,_u=new WeakMap;let vu;const wu=new WeakMap;let Hu=!1;try{Hu="undefined"!==typeof OffscreenCanvas&&null!==new OffscreenCanvas(1,1).getContext("2d")}catch(nd){}function createCanvas(ae,ue){return Hu?new OffscreenCanvas(ae,ue):(0,ut.qq$)("canvas")}function resizeImage(ae,ue,nt){let ut=1;const qt=getDimensions(ae);if((qt.width>nt||qt.height>nt)&&(ut=nt/Math.max(qt.width,qt.height)),ut<1){if("undefined"!==typeof HTMLImageElement&&ae instanceof HTMLImageElement||"undefined"!==typeof HTMLCanvasElement&&ae instanceof HTMLCanvasElement||"undefined"!==typeof ImageBitmap&&ae instanceof ImageBitmap||"undefined"!==typeof VideoFrame&&ae instanceof VideoFrame){const nt=Math.floor(ut*qt.width),Yt=Math.floor(ut*qt.height);void 0===vu&&(vu=createCanvas(nt,Yt));const Xt=ue?createCanvas(nt,Yt):vu;Xt.width=nt,Xt.height=Yt;return Xt.getContext("2d").drawImage(ae,0,0,nt,Yt),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+qt.width+"x"+qt.height+") to ("+nt+"x"+Yt+")."),Xt}return"data"in ae&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+qt.width+"x"+qt.height+")."),ae}return ae}function textureNeedsGenerateMipmaps(ae){return ae.generateMipmaps}function generateMipmap(ue){ae.generateMipmap(ue)}function getTargetType(ue){return ue.isWebGLCubeRenderTarget?ae.TEXTURE_CUBE_MAP:ue.isWebGL3DRenderTarget?ae.TEXTURE_3D:ue.isWebGLArrayRenderTarget||ue.isCompressedArrayTexture?ae.TEXTURE_2D_ARRAY:ae.TEXTURE_2D}function getInternalFormat(nt,qt,Yt,Xt,ys){if(void 0===ys&&(ys=!1),null!==nt){if(void 0!==ae[nt])return ae[nt];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+nt+"'")}let Ec=qt;if(qt===ae.RED&&(Yt===ae.FLOAT&&(Ec=ae.R32F),Yt===ae.HALF_FLOAT&&(Ec=ae.R16F),Yt===ae.UNSIGNED_BYTE&&(Ec=ae.R8)),qt===ae.RED_INTEGER&&(Yt===ae.UNSIGNED_BYTE&&(Ec=ae.R8UI),Yt===ae.UNSIGNED_SHORT&&(Ec=ae.R16UI),Yt===ae.UNSIGNED_INT&&(Ec=ae.R32UI),Yt===ae.BYTE&&(Ec=ae.R8I),Yt===ae.SHORT&&(Ec=ae.R16I),Yt===ae.INT&&(Ec=ae.R32I)),qt===ae.RG&&(Yt===ae.FLOAT&&(Ec=ae.RG32F),Yt===ae.HALF_FLOAT&&(Ec=ae.RG16F),Yt===ae.UNSIGNED_BYTE&&(Ec=ae.RG8)),qt===ae.RG_INTEGER&&(Yt===ae.UNSIGNED_BYTE&&(Ec=ae.RG8UI),Yt===ae.UNSIGNED_SHORT&&(Ec=ae.RG16UI),Yt===ae.UNSIGNED_INT&&(Ec=ae.RG32UI),Yt===ae.BYTE&&(Ec=ae.RG8I),Yt===ae.SHORT&&(Ec=ae.RG16I),Yt===ae.INT&&(Ec=ae.RG32I)),qt===ae.RGB_INTEGER&&(Yt===ae.UNSIGNED_BYTE&&(Ec=ae.RGB8UI),Yt===ae.UNSIGNED_SHORT&&(Ec=ae.RGB16UI),Yt===ae.UNSIGNED_INT&&(Ec=ae.RGB32UI),Yt===ae.BYTE&&(Ec=ae.RGB8I),Yt===ae.SHORT&&(Ec=ae.RGB16I),Yt===ae.INT&&(Ec=ae.RGB32I)),qt===ae.RGBA_INTEGER&&(Yt===ae.UNSIGNED_BYTE&&(Ec=ae.RGBA8UI),Yt===ae.UNSIGNED_SHORT&&(Ec=ae.RGBA16UI),Yt===ae.UNSIGNED_INT&&(Ec=ae.RGBA32UI),Yt===ae.BYTE&&(Ec=ae.RGBA8I),Yt===ae.SHORT&&(Ec=ae.RGBA16I),Yt===ae.INT&&(Ec=ae.RGBA32I)),qt===ae.RGB&&Yt===ae.UNSIGNED_INT_5_9_9_9_REV&&(Ec=ae.RGB9_E5),qt===ae.RGBA){const ue=ys?ut.VxR:ut.ppV.getTransfer(Xt);Yt===ae.FLOAT&&(Ec=ae.RGBA32F),Yt===ae.HALF_FLOAT&&(Ec=ae.RGBA16F),Yt===ae.UNSIGNED_BYTE&&(Ec=ue===ut.KLL?ae.SRGB8_ALPHA8:ae.RGBA8),Yt===ae.UNSIGNED_SHORT_4_4_4_4&&(Ec=ae.RGBA4),Yt===ae.UNSIGNED_SHORT_5_5_5_1&&(Ec=ae.RGB5_A1)}return Ec!==ae.R16F&&Ec!==ae.R32F&&Ec!==ae.RG16F&&Ec!==ae.RG32F&&Ec!==ae.RGBA16F&&Ec!==ae.RGBA32F||ue.get("EXT_color_buffer_float"),Ec}function getInternalDepthFormat(ue,nt){let qt;return ue?null===nt||nt===ut.bkx||nt===ut.V3x?qt=ae.DEPTH24_STENCIL8:nt===ut.RQf?qt=ae.DEPTH32F_STENCIL8:nt===ut.cHt&&(qt=ae.DEPTH24_STENCIL8,console.warn("DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.")):null===nt||nt===ut.bkx||nt===ut.V3x?qt=ae.DEPTH_COMPONENT24:nt===ut.RQf?qt=ae.DEPTH_COMPONENT32F:nt===ut.cHt&&(qt=ae.DEPTH_COMPONENT16),qt}function getMipLevels(ae,ue){return!0===textureNeedsGenerateMipmaps(ae)||ae.isFramebufferTexture&&ae.minFilter!==ut.hxR&&ae.minFilter!==ut.k6q?Math.log2(Math.max(ue.width,ue.height))+1:void 0!==ae.mipmaps&&ae.mipmaps.length>0?ae.mipmaps.length:ae.isCompressedTexture&&Array.isArray(ae.image)?ue.mipmaps.length:1}function onTextureDispose(ae){const ue=ae.target;ue.removeEventListener("dispose",onTextureDispose),function(ae){const ue=qt.get(ae);if(void 0===ue.__webglInit)return;const nt=ae.source,ut=wu.get(nt);if(ut){const qt=ut[ue.__cacheKey];qt.usedTimes--,0===qt.usedTimes&&deleteTexture(ae),0===Object.keys(ut).length&&wu.delete(nt)}qt.remove(ae)}(ue),ue.isVideoTexture&&_u.delete(ue)}function onRenderTargetDispose(ue){const nt=ue.target;nt.removeEventListener("dispose",onRenderTargetDispose),function(ue){const nt=qt.get(ue);ue.depthTexture&&(ue.depthTexture.dispose(),qt.remove(ue.depthTexture));if(ue.isWebGLCubeRenderTarget)for(let qt=0;qt<6;qt++){if(Array.isArray(nt.__webglFramebuffer[qt]))for(let ue=0;ue<nt.__webglFramebuffer[qt].length;ue++)ae.deleteFramebuffer(nt.__webglFramebuffer[qt][ue]);else ae.deleteFramebuffer(nt.__webglFramebuffer[qt]);nt.__webglDepthbuffer&&ae.deleteRenderbuffer(nt.__webglDepthbuffer[qt])}else{if(Array.isArray(nt.__webglFramebuffer))for(let ue=0;ue<nt.__webglFramebuffer.length;ue++)ae.deleteFramebuffer(nt.__webglFramebuffer[ue]);else ae.deleteFramebuffer(nt.__webglFramebuffer);if(nt.__webglDepthbuffer&&ae.deleteRenderbuffer(nt.__webglDepthbuffer),nt.__webglMultisampledFramebuffer&&ae.deleteFramebuffer(nt.__webglMultisampledFramebuffer),nt.__webglColorRenderbuffer)for(let ue=0;ue<nt.__webglColorRenderbuffer.length;ue++)nt.__webglColorRenderbuffer[ue]&&ae.deleteRenderbuffer(nt.__webglColorRenderbuffer[ue]);nt.__webglDepthRenderbuffer&&ae.deleteRenderbuffer(nt.__webglDepthRenderbuffer)}const ut=ue.textures;for(let Yt=0,Xt=ut.length;Yt<Xt;Yt++){const ue=qt.get(ut[Yt]);ue.__webglTexture&&(ae.deleteTexture(ue.__webglTexture),ys.memory.textures--),qt.remove(ut[Yt])}qt.remove(ue)}(nt)}function deleteTexture(ue){const nt=qt.get(ue);ae.deleteTexture(nt.__webglTexture);const ut=ue.source;delete wu.get(ut)[nt.__cacheKey],ys.memory.textures--}let qu=0;function setTexture2D(ue,ut){const Yt=qt.get(ue);if(ue.isVideoTexture&&function(ae){const ue=ys.render.frame;_u.get(ae)!==ue&&(_u.set(ae,ue),ae.update())}(ue),!1===ue.isRenderTargetTexture&&!0!==ue.isExternalTexture&&ue.version>0&&Yt.__version!==ue.version){const ae=ue.image;if(null===ae)console.warn("THREE.WebGLRenderer: Texture marked for update but no image data found.");else{if(!1!==ae.complete)return void uploadTexture(Yt,ue,ut);console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete")}}else ue.isExternalTexture&&(Yt.__webglTexture=ue.sourceTexture?ue.sourceTexture:null);nt.bindTexture(ae.TEXTURE_2D,Yt.__webglTexture,ae.TEXTURE0+ut)}const Ju={[ut.GJx]:ae.REPEAT,[ut.ghU]:ae.CLAMP_TO_EDGE,[ut.kTW]:ae.MIRRORED_REPEAT},_h={[ut.hxR]:ae.NEAREST,[ut.pHI]:ae.NEAREST_MIPMAP_NEAREST,[ut.Cfg]:ae.NEAREST_MIPMAP_LINEAR,[ut.k6q]:ae.LINEAR,[ut.kRr]:ae.LINEAR_MIPMAP_NEAREST,[ut.$_I]:ae.LINEAR_MIPMAP_LINEAR},ed={[ut.amv]:ae.NEVER,[ut.FFZ]:ae.ALWAYS,[ut.vim]:ae.LESS,[ut.TiK]:ae.LEQUAL,[ut.kO0]:ae.EQUAL,[ut.gWB]:ae.GEQUAL,[ut.eoi]:ae.GREATER,[ut.jzd]:ae.NOTEQUAL};function setTextureParameters(nt,Xt){if(Xt.type!==ut.RQf||!1!==ue.has("OES_texture_float_linear")||Xt.magFilter!==ut.k6q&&Xt.magFilter!==ut.kRr&&Xt.magFilter!==ut.Cfg&&Xt.magFilter!==ut.$_I&&Xt.minFilter!==ut.k6q&&Xt.minFilter!==ut.kRr&&Xt.minFilter!==ut.Cfg&&Xt.minFilter!==ut.$_I||console.warn("THREE.WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device."),ae.texParameteri(nt,ae.TEXTURE_WRAP_S,Ju[Xt.wrapS]),ae.texParameteri(nt,ae.TEXTURE_WRAP_T,Ju[Xt.wrapT]),nt!==ae.TEXTURE_3D&&nt!==ae.TEXTURE_2D_ARRAY||ae.texParameteri(nt,ae.TEXTURE_WRAP_R,Ju[Xt.wrapR]),ae.texParameteri(nt,ae.TEXTURE_MAG_FILTER,_h[Xt.magFilter]),ae.texParameteri(nt,ae.TEXTURE_MIN_FILTER,_h[Xt.minFilter]),Xt.compareFunction&&(ae.texParameteri(nt,ae.TEXTURE_COMPARE_MODE,ae.COMPARE_REF_TO_TEXTURE),ae.texParameteri(nt,ae.TEXTURE_COMPARE_FUNC,ed[Xt.compareFunction])),!0===ue.has("EXT_texture_filter_anisotropic")){if(Xt.magFilter===ut.hxR)return;if(Xt.minFilter!==ut.Cfg&&Xt.minFilter!==ut.$_I)return;if(Xt.type===ut.RQf&&!1===ue.has("OES_texture_float_linear"))return;if(Xt.anisotropy>1||qt.get(Xt).__currentAnisotropy){const ut=ue.get("EXT_texture_filter_anisotropic");ae.texParameterf(nt,ut.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(Xt.anisotropy,Yt.getMaxAnisotropy())),qt.get(Xt).__currentAnisotropy=Xt.anisotropy}}}function initTexture(ue,nt){let ut=!1;void 0===ue.__webglInit&&(ue.__webglInit=!0,nt.addEventListener("dispose",onTextureDispose));const qt=nt.source;let Yt=wu.get(qt);void 0===Yt&&(Yt={},wu.set(qt,Yt));const Xt=function(ae){const ue=[];return ue.push(ae.wrapS),ue.push(ae.wrapT),ue.push(ae.wrapR||0),ue.push(ae.magFilter),ue.push(ae.minFilter),ue.push(ae.anisotropy),ue.push(ae.internalFormat),ue.push(ae.format),ue.push(ae.type),ue.push(ae.generateMipmaps),ue.push(ae.premultiplyAlpha),ue.push(ae.flipY),ue.push(ae.unpackAlignment),ue.push(ae.colorSpace),ue.join()}(nt);if(Xt!==ue.__cacheKey){void 0===Yt[Xt]&&(Yt[Xt]={texture:ae.createTexture(),usedTimes:0},ys.memory.textures++,ut=!0),Yt[Xt].usedTimes++;const qt=Yt[ue.__cacheKey];void 0!==qt&&(Yt[ue.__cacheKey].usedTimes--,0===qt.usedTimes&&deleteTexture(nt)),ue.__cacheKey=Xt,ue.__webglTexture=Yt[Xt].texture}return ut}function getRow(ae,ue,nt){return Math.floor(Math.floor(ae/nt)/ue)}function uploadTexture(ue,ys,Ec){let lu=ae.TEXTURE_2D;(ys.isDataArrayTexture||ys.isCompressedArrayTexture)&&(lu=ae.TEXTURE_2D_ARRAY),ys.isData3DTexture&&(lu=ae.TEXTURE_3D);const uu=initTexture(ue,ys),_u=ys.source;nt.bindTexture(lu,ue.__webglTexture,ae.TEXTURE0+Ec);const vu=qt.get(_u);if(_u.version!==vu.__version||!0===uu){nt.activeTexture(ae.TEXTURE0+Ec);const ue=ut.ppV.getPrimaries(ut.ppV.workingColorSpace),qt=ys.colorSpace===ut.jf0?null:ut.ppV.getPrimaries(ys.colorSpace),wu=ys.colorSpace===ut.jf0||ue===qt?ae.NONE:ae.BROWSER_DEFAULT_WEBGL;ae.pixelStorei(ae.UNPACK_FLIP_Y_WEBGL,ys.flipY),ae.pixelStorei(ae.UNPACK_PREMULTIPLY_ALPHA_WEBGL,ys.premultiplyAlpha),ae.pixelStorei(ae.UNPACK_ALIGNMENT,ys.unpackAlignment),ae.pixelStorei(ae.UNPACK_COLORSPACE_CONVERSION_WEBGL,wu);let Hu=resizeImage(ys.image,!1,Yt.maxTextureSize);Hu=verifyColorSpace(ys,Hu);const qu=Xt.convert(ys.format,ys.colorSpace),Ju=Xt.convert(ys.type);let _h,ed=getInternalFormat(ys.internalFormat,qu,Ju,ys.colorSpace,ys.isVideoTexture);setTextureParameters(lu,ys);const td=ys.mipmaps,id=!0!==ys.isVideoTexture,nd=void 0===vu.__version||!0===uu,rd=_u.dataReady,ad=getMipLevels(ys,Hu);if(ys.isDepthTexture)ed=getInternalDepthFormat(ys.format===ut.dcC,ys.type),nd&&(id?nt.texStorage2D(ae.TEXTURE_2D,1,ed,Hu.width,Hu.height):nt.texImage2D(ae.TEXTURE_2D,0,ed,Hu.width,Hu.height,0,qu,Ju,null));else if(ys.isDataTexture)if(td.length>0){id&&nd&&nt.texStorage2D(ae.TEXTURE_2D,ad,ed,td[0].width,td[0].height);for(let ue=0,ut=td.length;ue<ut;ue++)_h=td[ue],id?rd&&nt.texSubImage2D(ae.TEXTURE_2D,ue,0,0,_h.width,_h.height,qu,Ju,_h.data):nt.texImage2D(ae.TEXTURE_2D,ue,ed,_h.width,_h.height,0,qu,Ju,_h.data);ys.generateMipmaps=!1}else id?(nd&&nt.texStorage2D(ae.TEXTURE_2D,ad,ed,Hu.width,Hu.height),rd&&function(ue,ut,qt,Yt){const Xt=ue.updateRanges;if(0===Xt.length)nt.texSubImage2D(ae.TEXTURE_2D,0,0,0,ut.width,ut.height,qt,Yt,ut.data);else{Xt.sort(((ae,ue)=>ae.start-ue.start));let ys=0;for(let ae=1;ae<Xt.length;ae++){const ue=Xt[ys],nt=Xt[ae],qt=ue.start+ue.count,Yt=getRow(nt.start,ut.width,4),Ec=getRow(ue.start,ut.width,4);nt.start<=qt+1&&Yt===Ec&&getRow(nt.start+nt.count-1,ut.width,4)===Yt?ue.count=Math.max(ue.count,nt.start+nt.count-ue.start):(++ys,Xt[ys]=nt)}Xt.length=ys+1;const Ec=ae.getParameter(ae.UNPACK_ROW_LENGTH),lu=ae.getParameter(ae.UNPACK_SKIP_PIXELS),uu=ae.getParameter(ae.UNPACK_SKIP_ROWS);ae.pixelStorei(ae.UNPACK_ROW_LENGTH,ut.width);for(let ue=0,_u=Xt.length;ue<_u;ue++){const ys=Xt[ue],Ec=Math.floor(ys.start/4),lu=Math.ceil(ys.count/4),uu=Ec%ut.width,_u=Math.floor(Ec/ut.width),vu=lu,wu=1;ae.pixelStorei(ae.UNPACK_SKIP_PIXELS,uu),ae.pixelStorei(ae.UNPACK_SKIP_ROWS,_u),nt.texSubImage2D(ae.TEXTURE_2D,0,uu,_u,vu,wu,qt,Yt,ut.data)}ue.clearUpdateRanges(),ae.pixelStorei(ae.UNPACK_ROW_LENGTH,Ec),ae.pixelStorei(ae.UNPACK_SKIP_PIXELS,lu),ae.pixelStorei(ae.UNPACK_SKIP_ROWS,uu)}}(ys,Hu,qu,Ju)):nt.texImage2D(ae.TEXTURE_2D,0,ed,Hu.width,Hu.height,0,qu,Ju,Hu.data);else if(ys.isCompressedTexture)if(ys.isCompressedArrayTexture){id&&nd&&nt.texStorage3D(ae.TEXTURE_2D_ARRAY,ad,ed,td[0].width,td[0].height,Hu.depth);for(let ue=0,qt=td.length;ue<qt;ue++)if(_h=td[ue],ys.format!==ut.GWd)if(null!==qu)if(id){if(rd)if(ys.layerUpdates.size>0){const qt=(0,ut.Nex)(_h.width,_h.height,ys.format,ys.type);for(const ut of ys.layerUpdates){const Yt=_h.data.subarray(ut*qt/_h.data.BYTES_PER_ELEMENT,(ut+1)*qt/_h.data.BYTES_PER_ELEMENT);nt.compressedTexSubImage3D(ae.TEXTURE_2D_ARRAY,ue,0,0,ut,_h.width,_h.height,1,qu,Yt)}ys.clearLayerUpdates()}else nt.compressedTexSubImage3D(ae.TEXTURE_2D_ARRAY,ue,0,0,0,_h.width,_h.height,Hu.depth,qu,_h.data)}else nt.compressedTexImage3D(ae.TEXTURE_2D_ARRAY,ue,ed,_h.width,_h.height,Hu.depth,0,_h.data,0,0);else console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()");else id?rd&&nt.texSubImage3D(ae.TEXTURE_2D_ARRAY,ue,0,0,0,_h.width,_h.height,Hu.depth,qu,Ju,_h.data):nt.texImage3D(ae.TEXTURE_2D_ARRAY,ue,ed,_h.width,_h.height,Hu.depth,0,qu,Ju,_h.data)}else{id&&nd&&nt.texStorage2D(ae.TEXTURE_2D,ad,ed,td[0].width,td[0].height);for(let ue=0,qt=td.length;ue<qt;ue++)_h=td[ue],ys.format!==ut.GWd?null!==qu?id?rd&&nt.compressedTexSubImage2D(ae.TEXTURE_2D,ue,0,0,_h.width,_h.height,qu,_h.data):nt.compressedTexImage2D(ae.TEXTURE_2D,ue,ed,_h.width,_h.height,0,_h.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"):id?rd&&nt.texSubImage2D(ae.TEXTURE_2D,ue,0,0,_h.width,_h.height,qu,Ju,_h.data):nt.texImage2D(ae.TEXTURE_2D,ue,ed,_h.width,_h.height,0,qu,Ju,_h.data)}else if(ys.isDataArrayTexture)if(id){if(nd&&nt.texStorage3D(ae.TEXTURE_2D_ARRAY,ad,ed,Hu.width,Hu.height,Hu.depth),rd)if(ys.layerUpdates.size>0){const ue=(0,ut.Nex)(Hu.width,Hu.height,ys.format,ys.type);for(const ut of ys.layerUpdates){const qt=Hu.data.subarray(ut*ue/Hu.data.BYTES_PER_ELEMENT,(ut+1)*ue/Hu.data.BYTES_PER_ELEMENT);nt.texSubImage3D(ae.TEXTURE_2D_ARRAY,0,0,0,ut,Hu.width,Hu.height,1,qu,Ju,qt)}ys.clearLayerUpdates()}else nt.texSubImage3D(ae.TEXTURE_2D_ARRAY,0,0,0,0,Hu.width,Hu.height,Hu.depth,qu,Ju,Hu.data)}else nt.texImage3D(ae.TEXTURE_2D_ARRAY,0,ed,Hu.width,Hu.height,Hu.depth,0,qu,Ju,Hu.data);else if(ys.isData3DTexture)id?(nd&&nt.texStorage3D(ae.TEXTURE_3D,ad,ed,Hu.width,Hu.height,Hu.depth),rd&&nt.texSubImage3D(ae.TEXTURE_3D,0,0,0,0,Hu.width,Hu.height,Hu.depth,qu,Ju,Hu.data)):nt.texImage3D(ae.TEXTURE_3D,0,ed,Hu.width,Hu.height,Hu.depth,0,qu,Ju,Hu.data);else if(ys.isFramebufferTexture){if(nd)if(id)nt.texStorage2D(ae.TEXTURE_2D,ad,ed,Hu.width,Hu.height);else{let ue=Hu.width,ut=Hu.height;for(let qt=0;qt<ad;qt++)nt.texImage2D(ae.TEXTURE_2D,qt,ed,ue,ut,0,qu,Ju,null),ue>>=1,ut>>=1}}else if(td.length>0){if(id&&nd){const ue=getDimensions(td[0]);nt.texStorage2D(ae.TEXTURE_2D,ad,ed,ue.width,ue.height)}for(let ue=0,ut=td.length;ue<ut;ue++)_h=td[ue],id?rd&&nt.texSubImage2D(ae.TEXTURE_2D,ue,0,0,qu,Ju,_h):nt.texImage2D(ae.TEXTURE_2D,ue,ed,qu,Ju,_h);ys.generateMipmaps=!1}else if(id){if(nd){const ue=getDimensions(Hu);nt.texStorage2D(ae.TEXTURE_2D,ad,ed,ue.width,ue.height)}rd&&nt.texSubImage2D(ae.TEXTURE_2D,0,0,0,qu,Ju,Hu)}else nt.texImage2D(ae.TEXTURE_2D,0,ed,qu,Ju,Hu);textureNeedsGenerateMipmaps(ys)&&generateMipmap(lu),vu.__version=_u.version,ys.onUpdate&&ys.onUpdate(ys)}ue.__version=ys.version}function setupFrameBufferTexture(ue,ut,Yt,ys,lu,uu){const _u=Xt.convert(Yt.format,Yt.colorSpace),vu=Xt.convert(Yt.type),wu=getInternalFormat(Yt.internalFormat,_u,vu,Yt.colorSpace),Hu=qt.get(ut),qu=qt.get(Yt);if(qu.__renderTarget=ut,!Hu.__hasExternalTextures){const ue=Math.max(1,ut.width>>uu),qt=Math.max(1,ut.height>>uu);lu===ae.TEXTURE_3D||lu===ae.TEXTURE_2D_ARRAY?nt.texImage3D(lu,uu,wu,ue,qt,ut.depth,0,_u,vu,null):nt.texImage2D(lu,uu,wu,ue,qt,0,_u,vu,null)}nt.bindFramebuffer(ae.FRAMEBUFFER,ue),useMultisampledRTT(ut)?Ec.framebufferTexture2DMultisampleEXT(ae.FRAMEBUFFER,ys,lu,qu.__webglTexture,0,getRenderTargetSamples(ut)):(lu===ae.TEXTURE_2D||lu>=ae.TEXTURE_CUBE_MAP_POSITIVE_X&&lu<=ae.TEXTURE_CUBE_MAP_NEGATIVE_Z)&&ae.framebufferTexture2D(ae.FRAMEBUFFER,ys,lu,qu.__webglTexture,uu),nt.bindFramebuffer(ae.FRAMEBUFFER,null)}function setupRenderBufferStorage(ue,nt,ut){if(ae.bindRenderbuffer(ae.RENDERBUFFER,ue),nt.depthBuffer){const qt=nt.depthTexture,Yt=qt&&qt.isDepthTexture?qt.type:null,Xt=getInternalDepthFormat(nt.stencilBuffer,Yt),ys=nt.stencilBuffer?ae.DEPTH_STENCIL_ATTACHMENT:ae.DEPTH_ATTACHMENT,lu=getRenderTargetSamples(nt);useMultisampledRTT(nt)?Ec.renderbufferStorageMultisampleEXT(ae.RENDERBUFFER,lu,Xt,nt.width,nt.height):ut?ae.renderbufferStorageMultisample(ae.RENDERBUFFER,lu,Xt,nt.width,nt.height):ae.renderbufferStorage(ae.RENDERBUFFER,Xt,nt.width,nt.height),ae.framebufferRenderbuffer(ae.FRAMEBUFFER,ys,ae.RENDERBUFFER,ue)}else{const ue=nt.textures;for(let qt=0;qt<ue.length;qt++){const Yt=ue[qt],ys=Xt.convert(Yt.format,Yt.colorSpace),lu=Xt.convert(Yt.type),uu=getInternalFormat(Yt.internalFormat,ys,lu,Yt.colorSpace),_u=getRenderTargetSamples(nt);ut&&!1===useMultisampledRTT(nt)?ae.renderbufferStorageMultisample(ae.RENDERBUFFER,_u,uu,nt.width,nt.height):useMultisampledRTT(nt)?Ec.renderbufferStorageMultisampleEXT(ae.RENDERBUFFER,_u,uu,nt.width,nt.height):ae.renderbufferStorage(ae.RENDERBUFFER,uu,nt.width,nt.height)}}ae.bindRenderbuffer(ae.RENDERBUFFER,null)}function setupDepthTexture(ue,Yt){if(Yt&&Yt.isWebGLCubeRenderTarget)throw new Error("Depth Texture with cube render targets is not supported");if(nt.bindFramebuffer(ae.FRAMEBUFFER,ue),!Yt.depthTexture||!Yt.depthTexture.isDepthTexture)throw new Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");const Xt=qt.get(Yt.depthTexture);Xt.__renderTarget=Yt,Xt.__webglTexture&&Yt.depthTexture.image.width===Yt.width&&Yt.depthTexture.image.height===Yt.height||(Yt.depthTexture.image.width=Yt.width,Yt.depthTexture.image.height=Yt.height,Yt.depthTexture.needsUpdate=!0),setTexture2D(Yt.depthTexture,0);const ys=Xt.__webglTexture,lu=getRenderTargetSamples(Yt);if(Yt.depthTexture.format===ut.zdS)useMultisampledRTT(Yt)?Ec.framebufferTexture2DMultisampleEXT(ae.FRAMEBUFFER,ae.DEPTH_ATTACHMENT,ae.TEXTURE_2D,ys,0,lu):ae.framebufferTexture2D(ae.FRAMEBUFFER,ae.DEPTH_ATTACHMENT,ae.TEXTURE_2D,ys,0);else{if(Yt.depthTexture.format!==ut.dcC)throw new Error("Unknown depthTexture format");useMultisampledRTT(Yt)?Ec.framebufferTexture2DMultisampleEXT(ae.FRAMEBUFFER,ae.DEPTH_STENCIL_ATTACHMENT,ae.TEXTURE_2D,ys,0,lu):ae.framebufferTexture2D(ae.FRAMEBUFFER,ae.DEPTH_STENCIL_ATTACHMENT,ae.TEXTURE_2D,ys,0)}}function setupDepthRenderbuffer(ue){const ut=qt.get(ue),Yt=!0===ue.isWebGLCubeRenderTarget;if(ut.__boundDepthTexture!==ue.depthTexture){const ae=ue.depthTexture;if(ut.__depthDisposeCallback&&ut.__depthDisposeCallback(),ae){const disposeEvent=()=>{delete ut.__boundDepthTexture,delete ut.__depthDisposeCallback,ae.removeEventListener("dispose",disposeEvent)};ae.addEventListener("dispose",disposeEvent),ut.__depthDisposeCallback=disposeEvent}ut.__boundDepthTexture=ae}if(ue.depthTexture&&!ut.__autoAllocateDepthBuffer){if(Yt)throw new Error("target.depthTexture not supported in Cube render targets");const ae=ue.texture.mipmaps;ae&&ae.length>0?setupDepthTexture(ut.__webglFramebuffer[0],ue):setupDepthTexture(ut.__webglFramebuffer,ue)}else if(Yt){ut.__webglDepthbuffer=[];for(let qt=0;qt<6;qt++)if(nt.bindFramebuffer(ae.FRAMEBUFFER,ut.__webglFramebuffer[qt]),void 0===ut.__webglDepthbuffer[qt])ut.__webglDepthbuffer[qt]=ae.createRenderbuffer(),setupRenderBufferStorage(ut.__webglDepthbuffer[qt],ue,!1);else{const nt=ue.stencilBuffer?ae.DEPTH_STENCIL_ATTACHMENT:ae.DEPTH_ATTACHMENT,Yt=ut.__webglDepthbuffer[qt];ae.bindRenderbuffer(ae.RENDERBUFFER,Yt),ae.framebufferRenderbuffer(ae.FRAMEBUFFER,nt,ae.RENDERBUFFER,Yt)}}else{const qt=ue.texture.mipmaps;if(qt&&qt.length>0?nt.bindFramebuffer(ae.FRAMEBUFFER,ut.__webglFramebuffer[0]):nt.bindFramebuffer(ae.FRAMEBUFFER,ut.__webglFramebuffer),void 0===ut.__webglDepthbuffer)ut.__webglDepthbuffer=ae.createRenderbuffer(),setupRenderBufferStorage(ut.__webglDepthbuffer,ue,!1);else{const nt=ue.stencilBuffer?ae.DEPTH_STENCIL_ATTACHMENT:ae.DEPTH_ATTACHMENT,qt=ut.__webglDepthbuffer;ae.bindRenderbuffer(ae.RENDERBUFFER,qt),ae.framebufferRenderbuffer(ae.FRAMEBUFFER,nt,ae.RENDERBUFFER,qt)}}nt.bindFramebuffer(ae.FRAMEBUFFER,null)}const td=[],id=[];function getRenderTargetSamples(ae){return Math.min(Yt.maxSamples,ae.samples)}function useMultisampledRTT(ae){const nt=qt.get(ae);return ae.samples>0&&!0===ue.has("WEBGL_multisampled_render_to_texture")&&!1!==nt.__useRenderToTexture}function verifyColorSpace(ae,ue){const nt=ae.colorSpace,qt=ae.format,Yt=ae.type;return!0===ae.isCompressedTexture||!0===ae.isVideoTexture||nt!==ut.Zr2&&nt!==ut.jf0&&(ut.ppV.getTransfer(nt)===ut.KLL?qt===ut.GWd&&Yt===ut.OUM||console.warn("THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType."):console.error("THREE.WebGLTextures: Unsupported texture color space:",nt)),ue}function getDimensions(ae){return"undefined"!==typeof HTMLImageElement&&ae instanceof HTMLImageElement?(uu.width=ae.naturalWidth||ae.width,uu.height=ae.naturalHeight||ae.height):"undefined"!==typeof VideoFrame&&ae instanceof VideoFrame?(uu.width=ae.displayWidth,uu.height=ae.displayHeight):(uu.width=ae.width,uu.height=ae.height),uu}this.allocateTextureUnit=function(){const ae=qu;return ae>=Yt.maxTextures&&console.warn("THREE.WebGLTextures: Trying to use "+ae+" texture units while this GPU supports only "+Yt.maxTextures),qu+=1,ae},this.resetTextureUnits=function(){qu=0},this.setTexture2D=setTexture2D,this.setTexture2DArray=function(ue,ut){const Yt=qt.get(ue);!1===ue.isRenderTargetTexture&&ue.version>0&&Yt.__version!==ue.version?uploadTexture(Yt,ue,ut):nt.bindTexture(ae.TEXTURE_2D_ARRAY,Yt.__webglTexture,ae.TEXTURE0+ut)},this.setTexture3D=function(ue,ut){const Yt=qt.get(ue);!1===ue.isRenderTargetTexture&&ue.version>0&&Yt.__version!==ue.version?uploadTexture(Yt,ue,ut):nt.bindTexture(ae.TEXTURE_3D,Yt.__webglTexture,ae.TEXTURE0+ut)},this.setTextureCube=function(ue,ys){const Ec=qt.get(ue);ue.version>0&&Ec.__version!==ue.version?function(ue,ys,Ec){if(6!==ys.image.length)return;const lu=initTexture(ue,ys),uu=ys.source;nt.bindTexture(ae.TEXTURE_CUBE_MAP,ue.__webglTexture,ae.TEXTURE0+Ec);const _u=qt.get(uu);if(uu.version!==_u.__version||!0===lu){nt.activeTexture(ae.TEXTURE0+Ec);const ue=ut.ppV.getPrimaries(ut.ppV.workingColorSpace),qt=ys.colorSpace===ut.jf0?null:ut.ppV.getPrimaries(ys.colorSpace),vu=ys.colorSpace===ut.jf0||ue===qt?ae.NONE:ae.BROWSER_DEFAULT_WEBGL;ae.pixelStorei(ae.UNPACK_FLIP_Y_WEBGL,ys.flipY),ae.pixelStorei(ae.UNPACK_PREMULTIPLY_ALPHA_WEBGL,ys.premultiplyAlpha),ae.pixelStorei(ae.UNPACK_ALIGNMENT,ys.unpackAlignment),ae.pixelStorei(ae.UNPACK_COLORSPACE_CONVERSION_WEBGL,vu);const wu=ys.isCompressedTexture||ys.image[0].isCompressedTexture,Hu=ys.image[0]&&ys.image[0].isDataTexture,qu=[];for(let ae=0;ae<6;ae++)qu[ae]=wu||Hu?Hu?ys.image[ae].image:ys.image[ae]:resizeImage(ys.image[ae],!0,Yt.maxCubemapSize),qu[ae]=verifyColorSpace(ys,qu[ae]);const Ju=qu[0],_h=Xt.convert(ys.format,ys.colorSpace),ed=Xt.convert(ys.type),td=getInternalFormat(ys.internalFormat,_h,ed,ys.colorSpace),id=!0!==ys.isVideoTexture,nd=void 0===_u.__version||!0===lu,rd=uu.dataReady;let ad,sd=getMipLevels(ys,Ju);if(setTextureParameters(ae.TEXTURE_CUBE_MAP,ys),wu){id&&nd&&nt.texStorage2D(ae.TEXTURE_CUBE_MAP,sd,td,Ju.width,Ju.height);for(let ue=0;ue<6;ue++){ad=qu[ue].mipmaps;for(let qt=0;qt<ad.length;qt++){const Yt=ad[qt];ys.format!==ut.GWd?null!==_h?id?rd&&nt.compressedTexSubImage2D(ae.TEXTURE_CUBE_MAP_POSITIVE_X+ue,qt,0,0,Yt.width,Yt.height,_h,Yt.data):nt.compressedTexImage2D(ae.TEXTURE_CUBE_MAP_POSITIVE_X+ue,qt,td,Yt.width,Yt.height,0,Yt.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()"):id?rd&&nt.texSubImage2D(ae.TEXTURE_CUBE_MAP_POSITIVE_X+ue,qt,0,0,Yt.width,Yt.height,_h,ed,Yt.data):nt.texImage2D(ae.TEXTURE_CUBE_MAP_POSITIVE_X+ue,qt,td,Yt.width,Yt.height,0,_h,ed,Yt.data)}}}else{if(ad=ys.mipmaps,id&&nd){ad.length>0&&sd++;const ue=getDimensions(qu[0]);nt.texStorage2D(ae.TEXTURE_CUBE_MAP,sd,td,ue.width,ue.height)}for(let ue=0;ue<6;ue++)if(Hu){id?rd&&nt.texSubImage2D(ae.TEXTURE_CUBE_MAP_POSITIVE_X+ue,0,0,0,qu[ue].width,qu[ue].height,_h,ed,qu[ue].data):nt.texImage2D(ae.TEXTURE_CUBE_MAP_POSITIVE_X+ue,0,td,qu[ue].width,qu[ue].height,0,_h,ed,qu[ue].data);for(let ut=0;ut<ad.length;ut++){const qt=ad[ut].image[ue].image;id?rd&&nt.texSubImage2D(ae.TEXTURE_CUBE_MAP_POSITIVE_X+ue,ut+1,0,0,qt.width,qt.height,_h,ed,qt.data):nt.texImage2D(ae.TEXTURE_CUBE_MAP_POSITIVE_X+ue,ut+1,td,qt.width,qt.height,0,_h,ed,qt.data)}}else{id?rd&&nt.texSubImage2D(ae.TEXTURE_CUBE_MAP_POSITIVE_X+ue,0,0,0,_h,ed,qu[ue]):nt.texImage2D(ae.TEXTURE_CUBE_MAP_POSITIVE_X+ue,0,td,_h,ed,qu[ue]);for(let ut=0;ut<ad.length;ut++){const qt=ad[ut];id?rd&&nt.texSubImage2D(ae.TEXTURE_CUBE_MAP_POSITIVE_X+ue,ut+1,0,0,_h,ed,qt.image[ue]):nt.texImage2D(ae.TEXTURE_CUBE_MAP_POSITIVE_X+ue,ut+1,td,_h,ed,qt.image[ue])}}}textureNeedsGenerateMipmaps(ys)&&generateMipmap(ae.TEXTURE_CUBE_MAP),_u.__version=uu.version,ys.onUpdate&&ys.onUpdate(ys)}ue.__version=ys.version}(Ec,ue,ys):nt.bindTexture(ae.TEXTURE_CUBE_MAP,Ec.__webglTexture,ae.TEXTURE0+ys)},this.rebindTextures=function(ue,nt,ut){const Yt=qt.get(ue);void 0!==nt&&setupFrameBufferTexture(Yt.__webglFramebuffer,ue,ue.texture,ae.COLOR_ATTACHMENT0,ae.TEXTURE_2D,0),void 0!==ut&&setupDepthRenderbuffer(ue)},this.setupRenderTarget=function(ue){const ut=ue.texture,Yt=qt.get(ue),Ec=qt.get(ut);ue.addEventListener("dispose",onRenderTargetDispose);const lu=ue.textures,uu=!0===ue.isWebGLCubeRenderTarget,_u=lu.length>1;if(_u||(void 0===Ec.__webglTexture&&(Ec.__webglTexture=ae.createTexture()),Ec.__version=ut.version,ys.memory.textures++),uu){Yt.__webglFramebuffer=[];for(let ue=0;ue<6;ue++)if(ut.mipmaps&&ut.mipmaps.length>0){Yt.__webglFramebuffer[ue]=[];for(let nt=0;nt<ut.mipmaps.length;nt++)Yt.__webglFramebuffer[ue][nt]=ae.createFramebuffer()}else Yt.__webglFramebuffer[ue]=ae.createFramebuffer()}else{if(ut.mipmaps&&ut.mipmaps.length>0){Yt.__webglFramebuffer=[];for(let ue=0;ue<ut.mipmaps.length;ue++)Yt.__webglFramebuffer[ue]=ae.createFramebuffer()}else Yt.__webglFramebuffer=ae.createFramebuffer();if(_u)for(let ue=0,nt=lu.length;ue<nt;ue++){const nt=qt.get(lu[ue]);void 0===nt.__webglTexture&&(nt.__webglTexture=ae.createTexture(),ys.memory.textures++)}if(ue.samples>0&&!1===useMultisampledRTT(ue)){Yt.__webglMultisampledFramebuffer=ae.createFramebuffer(),Yt.__webglColorRenderbuffer=[],nt.bindFramebuffer(ae.FRAMEBUFFER,Yt.__webglMultisampledFramebuffer);for(let nt=0;nt<lu.length;nt++){const ut=lu[nt];Yt.__webglColorRenderbuffer[nt]=ae.createRenderbuffer(),ae.bindRenderbuffer(ae.RENDERBUFFER,Yt.__webglColorRenderbuffer[nt]);const qt=Xt.convert(ut.format,ut.colorSpace),ys=Xt.convert(ut.type),Ec=getInternalFormat(ut.internalFormat,qt,ys,ut.colorSpace,!0===ue.isXRRenderTarget),uu=getRenderTargetSamples(ue);ae.renderbufferStorageMultisample(ae.RENDERBUFFER,uu,Ec,ue.width,ue.height),ae.framebufferRenderbuffer(ae.FRAMEBUFFER,ae.COLOR_ATTACHMENT0+nt,ae.RENDERBUFFER,Yt.__webglColorRenderbuffer[nt])}ae.bindRenderbuffer(ae.RENDERBUFFER,null),ue.depthBuffer&&(Yt.__webglDepthRenderbuffer=ae.createRenderbuffer(),setupRenderBufferStorage(Yt.__webglDepthRenderbuffer,ue,!0)),nt.bindFramebuffer(ae.FRAMEBUFFER,null)}}if(uu){nt.bindTexture(ae.TEXTURE_CUBE_MAP,Ec.__webglTexture),setTextureParameters(ae.TEXTURE_CUBE_MAP,ut);for(let nt=0;nt<6;nt++)if(ut.mipmaps&&ut.mipmaps.length>0)for(let qt=0;qt<ut.mipmaps.length;qt++)setupFrameBufferTexture(Yt.__webglFramebuffer[nt][qt],ue,ut,ae.COLOR_ATTACHMENT0,ae.TEXTURE_CUBE_MAP_POSITIVE_X+nt,qt);else setupFrameBufferTexture(Yt.__webglFramebuffer[nt],ue,ut,ae.COLOR_ATTACHMENT0,ae.TEXTURE_CUBE_MAP_POSITIVE_X+nt,0);textureNeedsGenerateMipmaps(ut)&&generateMipmap(ae.TEXTURE_CUBE_MAP),nt.unbindTexture()}else if(_u){for(let ut=0,Xt=lu.length;ut<Xt;ut++){const Xt=lu[ut],ys=qt.get(Xt);let Ec=ae.TEXTURE_2D;(ue.isWebGL3DRenderTarget||ue.isWebGLArrayRenderTarget)&&(Ec=ue.isWebGL3DRenderTarget?ae.TEXTURE_3D:ae.TEXTURE_2D_ARRAY),nt.bindTexture(Ec,ys.__webglTexture),setTextureParameters(Ec,Xt),setupFrameBufferTexture(Yt.__webglFramebuffer,ue,Xt,ae.COLOR_ATTACHMENT0+ut,Ec,0),textureNeedsGenerateMipmaps(Xt)&&generateMipmap(Ec)}nt.unbindTexture()}else{let qt=ae.TEXTURE_2D;if((ue.isWebGL3DRenderTarget||ue.isWebGLArrayRenderTarget)&&(qt=ue.isWebGL3DRenderTarget?ae.TEXTURE_3D:ae.TEXTURE_2D_ARRAY),nt.bindTexture(qt,Ec.__webglTexture),setTextureParameters(qt,ut),ut.mipmaps&&ut.mipmaps.length>0)for(let nt=0;nt<ut.mipmaps.length;nt++)setupFrameBufferTexture(Yt.__webglFramebuffer[nt],ue,ut,ae.COLOR_ATTACHMENT0,qt,nt);else setupFrameBufferTexture(Yt.__webglFramebuffer,ue,ut,ae.COLOR_ATTACHMENT0,qt,0);textureNeedsGenerateMipmaps(ut)&&generateMipmap(qt),nt.unbindTexture()}ue.depthBuffer&&setupDepthRenderbuffer(ue)},this.updateRenderTargetMipmap=function(ae){const ue=ae.textures;for(let ut=0,Yt=ue.length;ut<Yt;ut++){const Yt=ue[ut];if(textureNeedsGenerateMipmaps(Yt)){const ue=getTargetType(ae),ut=qt.get(Yt).__webglTexture;nt.bindTexture(ue,ut),generateMipmap(ue),nt.unbindTexture()}}},this.updateMultisampleRenderTarget=function(ue){if(ue.samples>0)if(!1===useMultisampledRTT(ue)){const ut=ue.textures,Yt=ue.width,Xt=ue.height;let ys=ae.COLOR_BUFFER_BIT;const Ec=ue.stencilBuffer?ae.DEPTH_STENCIL_ATTACHMENT:ae.DEPTH_ATTACHMENT,uu=qt.get(ue),_u=ut.length>1;if(_u)for(let ue=0;ue<ut.length;ue++)nt.bindFramebuffer(ae.FRAMEBUFFER,uu.__webglMultisampledFramebuffer),ae.framebufferRenderbuffer(ae.FRAMEBUFFER,ae.COLOR_ATTACHMENT0+ue,ae.RENDERBUFFER,null),nt.bindFramebuffer(ae.FRAMEBUFFER,uu.__webglFramebuffer),ae.framebufferTexture2D(ae.DRAW_FRAMEBUFFER,ae.COLOR_ATTACHMENT0+ue,ae.TEXTURE_2D,null,0);nt.bindFramebuffer(ae.READ_FRAMEBUFFER,uu.__webglMultisampledFramebuffer);const vu=ue.texture.mipmaps;vu&&vu.length>0?nt.bindFramebuffer(ae.DRAW_FRAMEBUFFER,uu.__webglFramebuffer[0]):nt.bindFramebuffer(ae.DRAW_FRAMEBUFFER,uu.__webglFramebuffer);for(let nt=0;nt<ut.length;nt++){if(ue.resolveDepthBuffer&&(ue.depthBuffer&&(ys|=ae.DEPTH_BUFFER_BIT),ue.stencilBuffer&&ue.resolveStencilBuffer&&(ys|=ae.STENCIL_BUFFER_BIT)),_u){ae.framebufferRenderbuffer(ae.READ_FRAMEBUFFER,ae.COLOR_ATTACHMENT0,ae.RENDERBUFFER,uu.__webglColorRenderbuffer[nt]);const ue=qt.get(ut[nt]).__webglTexture;ae.framebufferTexture2D(ae.DRAW_FRAMEBUFFER,ae.COLOR_ATTACHMENT0,ae.TEXTURE_2D,ue,0)}ae.blitFramebuffer(0,0,Yt,Xt,0,0,Yt,Xt,ys,ae.NEAREST),!0===lu&&(td.length=0,id.length=0,td.push(ae.COLOR_ATTACHMENT0+nt),ue.depthBuffer&&!1===ue.resolveDepthBuffer&&(td.push(Ec),id.push(Ec),ae.invalidateFramebuffer(ae.DRAW_FRAMEBUFFER,id)),ae.invalidateFramebuffer(ae.READ_FRAMEBUFFER,td))}if(nt.bindFramebuffer(ae.READ_FRAMEBUFFER,null),nt.bindFramebuffer(ae.DRAW_FRAMEBUFFER,null),_u)for(let ue=0;ue<ut.length;ue++){nt.bindFramebuffer(ae.FRAMEBUFFER,uu.__webglMultisampledFramebuffer),ae.framebufferRenderbuffer(ae.FRAMEBUFFER,ae.COLOR_ATTACHMENT0+ue,ae.RENDERBUFFER,uu.__webglColorRenderbuffer[ue]);const Yt=qt.get(ut[ue]).__webglTexture;nt.bindFramebuffer(ae.FRAMEBUFFER,uu.__webglFramebuffer),ae.framebufferTexture2D(ae.DRAW_FRAMEBUFFER,ae.COLOR_ATTACHMENT0+ue,ae.TEXTURE_2D,Yt,0)}nt.bindFramebuffer(ae.DRAW_FRAMEBUFFER,uu.__webglMultisampledFramebuffer)}else if(ue.depthBuffer&&!1===ue.resolveDepthBuffer&&lu){const nt=ue.stencilBuffer?ae.DEPTH_STENCIL_ATTACHMENT:ae.DEPTH_ATTACHMENT;ae.invalidateFramebuffer(ae.DRAW_FRAMEBUFFER,[nt])}},this.setupDepthRenderbuffer=setupDepthRenderbuffer,this.setupFrameBufferTexture=setupFrameBufferTexture,this.useMultisampledRTT=useMultisampledRTT}function WebGLUtils(ae,ue){return{convert:function(nt,qt){let Yt;void 0===qt&&(qt=ut.jf0);const Xt=ut.ppV.getTransfer(qt);if(nt===ut.OUM)return ae.UNSIGNED_BYTE;if(nt===ut.Wew)return ae.UNSIGNED_SHORT_4_4_4_4;if(nt===ut.gJ2)return ae.UNSIGNED_SHORT_5_5_5_1;if(nt===ut.Dmk)return ae.UNSIGNED_INT_5_9_9_9_REV;if(nt===ut.tJf)return ae.BYTE;if(nt===ut.fBL)return ae.SHORT;if(nt===ut.cHt)return ae.UNSIGNED_SHORT;if(nt===ut.Yuy)return ae.INT;if(nt===ut.bkx)return ae.UNSIGNED_INT;if(nt===ut.RQf)return ae.FLOAT;if(nt===ut.ix0)return ae.HALF_FLOAT;if(nt===ut.wrO)return ae.ALPHA;if(nt===ut.HIg)return ae.RGB;if(nt===ut.GWd)return ae.RGBA;if(nt===ut.zdS)return ae.DEPTH_COMPONENT;if(nt===ut.dcC)return ae.DEPTH_STENCIL;if(nt===ut.VT0)return ae.RED;if(nt===ut.ZQM)return ae.RED_INTEGER;if(nt===ut.paN)return ae.RG;if(nt===ut.TkQ)return ae.RG_INTEGER;if(nt===ut.c90)return ae.RGBA_INTEGER;if(nt===ut.IE4||nt===ut.Nz6||nt===ut.jR7||nt===ut.BXX)if(Xt===ut.KLL){if(Yt=ue.get("WEBGL_compressed_texture_s3tc_srgb"),null===Yt)return null;if(nt===ut.IE4)return Yt.COMPRESSED_SRGB_S3TC_DXT1_EXT;if(nt===ut.Nz6)return Yt.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;if(nt===ut.jR7)return Yt.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;if(nt===ut.BXX)return Yt.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}else{if(Yt=ue.get("WEBGL_compressed_texture_s3tc"),null===Yt)return null;if(nt===ut.IE4)return Yt.COMPRESSED_RGB_S3TC_DXT1_EXT;if(nt===ut.Nz6)return Yt.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(nt===ut.jR7)return Yt.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(nt===ut.BXX)return Yt.COMPRESSED_RGBA_S3TC_DXT5_EXT}if(nt===ut.k6Q||nt===ut.kTp||nt===ut.HXV||nt===ut.pBf){if(Yt=ue.get("WEBGL_compressed_texture_pvrtc"),null===Yt)return null;if(nt===ut.k6Q)return Yt.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(nt===ut.kTp)return Yt.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(nt===ut.HXV)return Yt.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(nt===ut.pBf)return Yt.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(nt===ut.CVz||nt===ut.Riy||nt===ut.KDk){if(Yt=ue.get("WEBGL_compressed_texture_etc"),null===Yt)return null;if(nt===ut.CVz||nt===ut.Riy)return Xt===ut.KLL?Yt.COMPRESSED_SRGB8_ETC2:Yt.COMPRESSED_RGB8_ETC2;if(nt===ut.KDk)return Xt===ut.KLL?Yt.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:Yt.COMPRESSED_RGBA8_ETC2_EAC}if(nt===ut.qa3||nt===ut.B_h||nt===ut.czI||nt===ut.rSH||nt===ut.Qrf||nt===ut.psI||nt===ut.a5J||nt===ut._QJ||nt===ut.uB5||nt===ut.lyL||nt===ut.bC7||nt===ut.y3Z||nt===ut.ojs||nt===ut.S$4){if(Yt=ue.get("WEBGL_compressed_texture_astc"),null===Yt)return null;if(nt===ut.qa3)return Xt===ut.KLL?Yt.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:Yt.COMPRESSED_RGBA_ASTC_4x4_KHR;if(nt===ut.B_h)return Xt===ut.KLL?Yt.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:Yt.COMPRESSED_RGBA_ASTC_5x4_KHR;if(nt===ut.czI)return Xt===ut.KLL?Yt.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:Yt.COMPRESSED_RGBA_ASTC_5x5_KHR;if(nt===ut.rSH)return Xt===ut.KLL?Yt.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:Yt.COMPRESSED_RGBA_ASTC_6x5_KHR;if(nt===ut.Qrf)return Xt===ut.KLL?Yt.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:Yt.COMPRESSED_RGBA_ASTC_6x6_KHR;if(nt===ut.psI)return Xt===ut.KLL?Yt.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:Yt.COMPRESSED_RGBA_ASTC_8x5_KHR;if(nt===ut.a5J)return Xt===ut.KLL?Yt.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:Yt.COMPRESSED_RGBA_ASTC_8x6_KHR;if(nt===ut._QJ)return Xt===ut.KLL?Yt.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:Yt.COMPRESSED_RGBA_ASTC_8x8_KHR;if(nt===ut.uB5)return Xt===ut.KLL?Yt.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:Yt.COMPRESSED_RGBA_ASTC_10x5_KHR;if(nt===ut.lyL)return Xt===ut.KLL?Yt.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:Yt.COMPRESSED_RGBA_ASTC_10x6_KHR;if(nt===ut.bC7)return Xt===ut.KLL?Yt.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:Yt.COMPRESSED_RGBA_ASTC_10x8_KHR;if(nt===ut.y3Z)return Xt===ut.KLL?Yt.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:Yt.COMPRESSED_RGBA_ASTC_10x10_KHR;if(nt===ut.ojs)return Xt===ut.KLL?Yt.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:Yt.COMPRESSED_RGBA_ASTC_12x10_KHR;if(nt===ut.S$4)return Xt===ut.KLL?Yt.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:Yt.COMPRESSED_RGBA_ASTC_12x12_KHR}if(nt===ut.Fn||nt===ut.H23||nt===ut.W9U){if(Yt=ue.get("EXT_texture_compression_bptc"),null===Yt)return null;if(nt===ut.Fn)return Xt===ut.KLL?Yt.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:Yt.COMPRESSED_RGBA_BPTC_UNORM_EXT;if(nt===ut.H23)return Yt.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT;if(nt===ut.W9U)return Yt.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT}if(nt===ut.Kef||nt===ut.XG_||nt===ut.HO_||nt===ut.CWW){if(Yt=ue.get("EXT_texture_compression_rgtc"),null===Yt)return null;if(nt===ut.Fn)return Yt.COMPRESSED_RED_RGTC1_EXT;if(nt===ut.XG_)return Yt.COMPRESSED_SIGNED_RED_RGTC1_EXT;if(nt===ut.HO_)return Yt.COMPRESSED_RED_GREEN_RGTC2_EXT;if(nt===ut.CWW)return Yt.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT}return nt===ut.V3x?ae.UNSIGNED_INT_24_8:void 0!==ae[nt]?ae[nt]:null}}}class ExternalTexture extends ut.gPd{constructor(ae){void 0===ae&&(ae=null),super(),this.sourceTexture=ae,this.isExternalTexture=!0}}class WebXRDepthSensing{constructor(){this.texture=null,this.mesh=null,this.depthNear=0,this.depthFar=0}init(ae,ue){if(null===this.texture){const nt=new ExternalTexture(ae.texture);ae.depthNear===ue.depthNear&&ae.depthFar===ue.depthFar||(this.depthNear=ae.depthNear,this.depthFar=ae.depthFar),this.texture=nt}}getMesh(ae){if(null!==this.texture&&null===this.mesh){const ue=ae.cameras[0].viewport,nt=new ut.BKk({vertexShader:"\nvoid main() {\n\n\tgl_Position = vec4( position, 1.0 );\n\n}",fragmentShader:"\nuniform sampler2DArray depthColor;\nuniform float depthWidth;\nuniform float depthHeight;\n\nvoid main() {\n\n\tvec2 coord = vec2( gl_FragCoord.x / depthWidth, gl_FragCoord.y / depthHeight );\n\n\tif ( coord.x >= 1.0 ) {\n\n\t\tgl_FragDepth = texture( depthColor, vec3( coord.x - 1.0, coord.y, 1 ) ).r;\n\n\t} else {\n\n\t\tgl_FragDepth = texture( depthColor, vec3( coord.x, coord.y, 0 ) ).r;\n\n\t}\n\n}",uniforms:{depthColor:{value:this.texture},depthWidth:{value:ue.z},depthHeight:{value:ue.w}}});this.mesh=new ut.eaF(new ut.bdM(20,20),nt)}return this.mesh}reset(){this.texture=null,this.mesh=null}getDepthTexture(){return this.texture}}class WebXRManager extends ut.Qev{constructor(ae,ue){super();const nt=this;let qt=null,Yt=1,Xt=null,ys="local-floor",Ec=1,lu=null,uu=null,_u=null,vu=null,wu=null,Hu=null;const qu=new WebXRDepthSensing,Ju={},_h=ue.getContextAttributes();let ed=null,td=null;const id=[],nd=[],rd=new ut.I9Y;let ad=null;const sd=new ut.ubm;sd.viewport=new ut.IUQ;const od=new ut.ubm;od.viewport=new ut.IUQ;const ld=[sd,od],cd=new ut.nZQ;let ud=null,hd=null;function onSessionEvent(ae){const ue=nd.indexOf(ae.inputSource);if(-1===ue)return;const nt=id[ue];void 0!==nt&&(nt.update(ae.inputSource,ae.frame,lu||Xt),nt.dispatchEvent({type:ae.type,data:ae.inputSource}))}function onSessionEnd(){qt.removeEventListener("select",onSessionEvent),qt.removeEventListener("selectstart",onSessionEvent),qt.removeEventListener("selectend",onSessionEvent),qt.removeEventListener("squeeze",onSessionEvent),qt.removeEventListener("squeezestart",onSessionEvent),qt.removeEventListener("squeezeend",onSessionEvent),qt.removeEventListener("end",onSessionEnd),qt.removeEventListener("inputsourceschange",onInputSourcesChange);for(let ae=0;ae<id.length;ae++){const ue=nd[ae];null!==ue&&(nd[ae]=null,id[ae].disconnect(ue))}ud=null,hd=null,qu.reset();for(const ae in Ju)delete Ju[ae];ae.setRenderTarget(ed),wu=null,vu=null,_u=null,qt=null,td=null,gd.stop(),nt.isPresenting=!1,ae.setPixelRatio(ad),ae.setSize(rd.width,rd.height,!1),nt.dispatchEvent({type:"sessionend"})}function onInputSourcesChange(ae){for(let ue=0;ue<ae.removed.length;ue++){const nt=ae.removed[ue],ut=nd.indexOf(nt);ut>=0&&(nd[ut]=null,id[ut].disconnect(nt))}for(let ue=0;ue<ae.added.length;ue++){const nt=ae.added[ue];let ut=nd.indexOf(nt);if(-1===ut){for(let ae=0;ae<id.length;ae++){if(ae>=nd.length){nd.push(nt),ut=ae;break}if(null===nd[ae]){nd[ae]=nt,ut=ae;break}}if(-1===ut)break}const qt=id[ut];qt&&qt.connect(nt)}}this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(ae){let ue=id[ae];return void 0===ue&&(ue=new ut.R3r,id[ae]=ue),ue.getTargetRaySpace()},this.getControllerGrip=function(ae){let ue=id[ae];return void 0===ue&&(ue=new ut.R3r,id[ae]=ue),ue.getGripSpace()},this.getHand=function(ae){let ue=id[ae];return void 0===ue&&(ue=new ut.R3r,id[ae]=ue),ue.getHandSpace()},this.setFramebufferScaleFactor=function(ae){Yt=ae,!0===nt.isPresenting&&console.warn("THREE.WebXRManager: Cannot change framebuffer scale while presenting.")},this.setReferenceSpaceType=function(ae){ys=ae,!0===nt.isPresenting&&console.warn("THREE.WebXRManager: Cannot change reference space type while presenting.")},this.getReferenceSpace=function(){return lu||Xt},this.setReferenceSpace=function(ae){lu=ae},this.getBaseLayer=function(){return null!==vu?vu:wu},this.getBinding=function(){return _u},this.getFrame=function(){return Hu},this.getSession=function(){return qt},this.setSession=async function(uu){if(qt=uu,null!==qt){ed=ae.getRenderTarget(),qt.addEventListener("select",onSessionEvent),qt.addEventListener("selectstart",onSessionEvent),qt.addEventListener("selectend",onSessionEvent),qt.addEventListener("squeeze",onSessionEvent),qt.addEventListener("squeezestart",onSessionEvent),qt.addEventListener("squeezeend",onSessionEvent),qt.addEventListener("end",onSessionEnd),qt.addEventListener("inputsourceschange",onInputSourcesChange),!0!==_h.xrCompatible&&await ue.makeXRCompatible(),ad=ae.getPixelRatio(),ae.getSize(rd),"undefined"!==typeof XRWebGLBinding&&(_u=new XRWebGLBinding(qt,ue));if(null!==_u&&"createProjectionLayer"in XRWebGLBinding.prototype){let nt=null,Xt=null,ys=null;_h.depth&&(ys=_h.stencil?ue.DEPTH24_STENCIL8:ue.DEPTH_COMPONENT24,nt=_h.stencil?ut.dcC:ut.zdS,Xt=_h.stencil?ut.V3x:ut.bkx);const Ec={colorFormat:ue.RGBA8,depthFormat:ys,scaleFactor:Yt};vu=_u.createProjectionLayer(Ec),qt.updateRenderState({layers:[vu]}),ae.setPixelRatio(1),ae.setSize(vu.textureWidth,vu.textureHeight,!1),td=new ut.nWS(vu.textureWidth,vu.textureHeight,{format:ut.GWd,type:ut.OUM,depthTexture:new ut.VCu(vu.textureWidth,vu.textureHeight,Xt,void 0,void 0,void 0,void 0,void 0,void 0,nt),stencilBuffer:_h.stencil,colorSpace:ae.outputColorSpace,samples:_h.antialias?4:0,resolveDepthBuffer:!1===vu.ignoreDepthValues,resolveStencilBuffer:!1===vu.ignoreDepthValues})}else{const nt={antialias:_h.antialias,alpha:!0,depth:_h.depth,stencil:_h.stencil,framebufferScaleFactor:Yt};wu=new XRWebGLLayer(qt,ue,nt),qt.updateRenderState({baseLayer:wu}),ae.setPixelRatio(1),ae.setSize(wu.framebufferWidth,wu.framebufferHeight,!1),td=new ut.nWS(wu.framebufferWidth,wu.framebufferHeight,{format:ut.GWd,type:ut.OUM,colorSpace:ae.outputColorSpace,stencilBuffer:_h.stencil,resolveDepthBuffer:!1===wu.ignoreDepthValues,resolveStencilBuffer:!1===wu.ignoreDepthValues})}td.isXRRenderTarget=!0,this.setFoveation(Ec),lu=null,Xt=await qt.requestReferenceSpace(ys),gd.setContext(qt),gd.start(),nt.isPresenting=!0,nt.dispatchEvent({type:"sessionstart"})}},this.getEnvironmentBlendMode=function(){if(null!==qt)return qt.environmentBlendMode},this.getDepthTexture=function(){return qu.getDepthTexture()};const dd=new ut.Pq0,pd=new ut.Pq0;function updateCamera(ae,ue){null===ue?ae.matrixWorld.copy(ae.matrix):ae.matrixWorld.multiplyMatrices(ue.matrixWorld,ae.matrix),ae.matrixWorldInverse.copy(ae.matrixWorld).invert()}this.updateCamera=function(ae){if(null===qt)return;let ue=ae.near,nt=ae.far;null!==qu.texture&&(qu.depthNear>0&&(ue=qu.depthNear),qu.depthFar>0&&(nt=qu.depthFar)),cd.near=od.near=sd.near=ue,cd.far=od.far=sd.far=nt,ud===cd.near&&hd===cd.far||(qt.updateRenderState({depthNear:cd.near,depthFar:cd.far}),ud=cd.near,hd=cd.far),cd.layers.mask=6|ae.layers.mask,sd.layers.mask=3&cd.layers.mask,od.layers.mask=5&cd.layers.mask;const Yt=ae.parent,Xt=cd.cameras;updateCamera(cd,Yt);for(let ut=0;ut<Xt.length;ut++)updateCamera(Xt[ut],Yt);2===Xt.length?function(ae,ue,nt){dd.setFromMatrixPosition(ue.matrixWorld),pd.setFromMatrixPosition(nt.matrixWorld);const ut=dd.distanceTo(pd),qt=ue.projectionMatrix.elements,Yt=nt.projectionMatrix.elements,Xt=qt[14]/(qt[10]-1),ys=qt[14]/(qt[10]+1),Ec=(qt[9]+1)/qt[5],lu=(qt[9]-1)/qt[5],uu=(qt[8]-1)/qt[0],_u=(Yt[8]+1)/Yt[0],vu=Xt*uu,wu=Xt*_u,Hu=ut/(-uu+_u),qu=Hu*-uu;if(ue.matrixWorld.decompose(ae.position,ae.quaternion,ae.scale),ae.translateX(qu),ae.translateZ(Hu),ae.matrixWorld.compose(ae.position,ae.quaternion,ae.scale),ae.matrixWorldInverse.copy(ae.matrixWorld).invert(),-1===qt[10])ae.projectionMatrix.copy(ue.projectionMatrix),ae.projectionMatrixInverse.copy(ue.projectionMatrixInverse);else{const ue=Xt+Hu,nt=ys+Hu,qt=vu-qu,Yt=wu+(ut-qu),uu=Ec*ys/nt*ue,_u=lu*ys/nt*ue;ae.projectionMatrix.makePerspective(qt,Yt,uu,_u,ue,nt),ae.projectionMatrixInverse.copy(ae.projectionMatrix).invert()}}(cd,sd,od):cd.projectionMatrix.copy(sd.projectionMatrix),function(ae,ue,nt){null===nt?ae.matrix.copy(ue.matrixWorld):(ae.matrix.copy(nt.matrixWorld),ae.matrix.invert(),ae.matrix.multiply(ue.matrixWorld));ae.matrix.decompose(ae.position,ae.quaternion,ae.scale),ae.updateMatrixWorld(!0),ae.projectionMatrix.copy(ue.projectionMatrix),ae.projectionMatrixInverse.copy(ue.projectionMatrixInverse),ae.isPerspectiveCamera&&(ae.fov=2*ut.a55*Math.atan(1/ae.projectionMatrix.elements[5]),ae.zoom=1)}(ae,cd,Yt)},this.getCamera=function(){return cd},this.getFoveation=function(){if(null!==vu||null!==wu)return Ec},this.setFoveation=function(ae){Ec=ae,null!==vu&&(vu.fixedFoveation=ae),null!==wu&&void 0!==wu.fixedFoveation&&(wu.fixedFoveation=ae)},this.hasDepthSensing=function(){return null!==qu.texture},this.getDepthSensingMesh=function(){return qu.getMesh(cd)},this.getCameraTexture=function(ae){return Ju[ae]};let md=null;const gd=new WebGLAnimation;gd.setAnimationLoop((function(ue,Yt){if(uu=Yt.getViewerPose(lu||Xt),Hu=Yt,null!==uu){const ue=uu.views;null!==wu&&(ae.setRenderTargetFramebuffer(td,wu.framebuffer),ae.setRenderTarget(td));let nt=!1;ue.length!==cd.cameras.length&&(cd.cameras.length=0,nt=!0);for(let qt=0;qt<ue.length;qt++){const Yt=ue[qt];let Xt=null;if(null!==wu)Xt=wu.getViewport(Yt);else{const ue=_u.getViewSubImage(vu,Yt);Xt=ue.viewport,0===qt&&(ae.setRenderTargetTextures(td,ue.colorTexture,ue.depthStencilTexture),ae.setRenderTarget(td))}let ys=ld[qt];void 0===ys&&(ys=new ut.ubm,ys.layers.enable(qt),ys.viewport=new ut.IUQ,ld[qt]=ys),ys.matrix.fromArray(Yt.transform.matrix),ys.matrix.decompose(ys.position,ys.quaternion,ys.scale),ys.projectionMatrix.fromArray(Yt.projectionMatrix),ys.projectionMatrixInverse.copy(ys.projectionMatrix).invert(),ys.viewport.set(Xt.x,Xt.y,Xt.width,Xt.height),0===qt&&(cd.matrix.copy(ys.matrix),cd.matrix.decompose(cd.position,cd.quaternion,cd.scale)),!0===nt&&cd.cameras.push(ys)}const Yt=qt.enabledFeatures;if(Yt&&Yt.includes("depth-sensing")&&"gpu-optimized"==qt.depthUsage&&_u){const ae=_u.getDepthInformation(ue[0]);ae&&ae.isValid&&ae.texture&&qu.init(ae,qt.renderState)}if(Yt&&Yt.includes("camera-access")&&(ae.state.unbindTexture(),_u))for(let ae=0;ae<ue.length;ae++){const nt=ue[ae].camera;if(nt){let ae=Ju[nt];ae||(ae=new ExternalTexture,Ju[nt]=ae);const ue=_u.getCameraImage(nt);ae.sourceTexture=ue}}}for(let ae=0;ae<id.length;ae++){const ue=nd[ae],nt=id[ae];null!==ue&&void 0!==nt&&nt.update(ue,Yt,lu||Xt)}md&&md(ue,Yt),Yt.detectedPlanes&&nt.dispatchEvent({type:"planesdetected",data:Yt}),Hu=null})),this.setAnimationLoop=function(ae){md=ae},this.dispose=function(){}}}const Ed=new ut.O9p,Md=new ut.kn4;function WebGLMaterials(ae,ue){function refreshTransformUniform(ae,ue){!0===ae.matrixAutoUpdate&&ae.updateMatrix(),ue.value.copy(ae.matrix)}function refreshUniformsCommon(ae,nt){ae.opacity.value=nt.opacity,nt.color&&ae.diffuse.value.copy(nt.color),nt.emissive&&ae.emissive.value.copy(nt.emissive).multiplyScalar(nt.emissiveIntensity),nt.map&&(ae.map.value=nt.map,refreshTransformUniform(nt.map,ae.mapTransform)),nt.alphaMap&&(ae.alphaMap.value=nt.alphaMap,refreshTransformUniform(nt.alphaMap,ae.alphaMapTransform)),nt.bumpMap&&(ae.bumpMap.value=nt.bumpMap,refreshTransformUniform(nt.bumpMap,ae.bumpMapTransform),ae.bumpScale.value=nt.bumpScale,nt.side===ut.hsX&&(ae.bumpScale.value*=-1)),nt.normalMap&&(ae.normalMap.value=nt.normalMap,refreshTransformUniform(nt.normalMap,ae.normalMapTransform),ae.normalScale.value.copy(nt.normalScale),nt.side===ut.hsX&&ae.normalScale.value.negate()),nt.displacementMap&&(ae.displacementMap.value=nt.displacementMap,refreshTransformUniform(nt.displacementMap,ae.displacementMapTransform),ae.displacementScale.value=nt.displacementScale,ae.displacementBias.value=nt.displacementBias),nt.emissiveMap&&(ae.emissiveMap.value=nt.emissiveMap,refreshTransformUniform(nt.emissiveMap,ae.emissiveMapTransform)),nt.specularMap&&(ae.specularMap.value=nt.specularMap,refreshTransformUniform(nt.specularMap,ae.specularMapTransform)),nt.alphaTest>0&&(ae.alphaTest.value=nt.alphaTest);const qt=ue.get(nt),Yt=qt.envMap,Xt=qt.envMapRotation;Yt&&(ae.envMap.value=Yt,Ed.copy(Xt),Ed.x*=-1,Ed.y*=-1,Ed.z*=-1,Yt.isCubeTexture&&!1===Yt.isRenderTargetTexture&&(Ed.y*=-1,Ed.z*=-1),ae.envMapRotation.value.setFromMatrix4(Md.makeRotationFromEuler(Ed)),ae.flipEnvMap.value=Yt.isCubeTexture&&!1===Yt.isRenderTargetTexture?-1:1,ae.reflectivity.value=nt.reflectivity,ae.ior.value=nt.ior,ae.refractionRatio.value=nt.refractionRatio),nt.lightMap&&(ae.lightMap.value=nt.lightMap,ae.lightMapIntensity.value=nt.lightMapIntensity,refreshTransformUniform(nt.lightMap,ae.lightMapTransform)),nt.aoMap&&(ae.aoMap.value=nt.aoMap,ae.aoMapIntensity.value=nt.aoMapIntensity,refreshTransformUniform(nt.aoMap,ae.aoMapTransform))}return{refreshFogUniforms:function(ue,nt){nt.color.getRGB(ue.fogColor.value,(0,ut._Ut)(ae)),nt.isFog?(ue.fogNear.value=nt.near,ue.fogFar.value=nt.far):nt.isFogExp2&&(ue.fogDensity.value=nt.density)},refreshMaterialUniforms:function(ae,nt,qt,Yt,Xt){nt.isMeshBasicMaterial||nt.isMeshLambertMaterial?refreshUniformsCommon(ae,nt):nt.isMeshToonMaterial?(refreshUniformsCommon(ae,nt),function(ae,ue){ue.gradientMap&&(ae.gradientMap.value=ue.gradientMap)}(ae,nt)):nt.isMeshPhongMaterial?(refreshUniformsCommon(ae,nt),function(ae,ue){ae.specular.value.copy(ue.specular),ae.shininess.value=Math.max(ue.shininess,1e-4)}(ae,nt)):nt.isMeshStandardMaterial?(refreshUniformsCommon(ae,nt),function(ae,ue){ae.metalness.value=ue.metalness,ue.metalnessMap&&(ae.metalnessMap.value=ue.metalnessMap,refreshTransformUniform(ue.metalnessMap,ae.metalnessMapTransform));ae.roughness.value=ue.roughness,ue.roughnessMap&&(ae.roughnessMap.value=ue.roughnessMap,refreshTransformUniform(ue.roughnessMap,ae.roughnessMapTransform));ue.envMap&&(ae.envMapIntensity.value=ue.envMapIntensity)}(ae,nt),nt.isMeshPhysicalMaterial&&function(ae,ue,nt){ae.ior.value=ue.ior,ue.sheen>0&&(ae.sheenColor.value.copy(ue.sheenColor).multiplyScalar(ue.sheen),ae.sheenRoughness.value=ue.sheenRoughness,ue.sheenColorMap&&(ae.sheenColorMap.value=ue.sheenColorMap,refreshTransformUniform(ue.sheenColorMap,ae.sheenColorMapTransform)),ue.sheenRoughnessMap&&(ae.sheenRoughnessMap.value=ue.sheenRoughnessMap,refreshTransformUniform(ue.sheenRoughnessMap,ae.sheenRoughnessMapTransform)));ue.clearcoat>0&&(ae.clearcoat.value=ue.clearcoat,ae.clearcoatRoughness.value=ue.clearcoatRoughness,ue.clearcoatMap&&(ae.clearcoatMap.value=ue.clearcoatMap,refreshTransformUniform(ue.clearcoatMap,ae.clearcoatMapTransform)),ue.clearcoatRoughnessMap&&(ae.clearcoatRoughnessMap.value=ue.clearcoatRoughnessMap,refreshTransformUniform(ue.clearcoatRoughnessMap,ae.clearcoatRoughnessMapTransform)),ue.clearcoatNormalMap&&(ae.clearcoatNormalMap.value=ue.clearcoatNormalMap,refreshTransformUniform(ue.clearcoatNormalMap,ae.clearcoatNormalMapTransform),ae.clearcoatNormalScale.value.copy(ue.clearcoatNormalScale),ue.side===ut.hsX&&ae.clearcoatNormalScale.value.negate()));ue.dispersion>0&&(ae.dispersion.value=ue.dispersion);ue.iridescence>0&&(ae.iridescence.value=ue.iridescence,ae.iridescenceIOR.value=ue.iridescenceIOR,ae.iridescenceThicknessMinimum.value=ue.iridescenceThicknessRange[0],ae.iridescenceThicknessMaximum.value=ue.iridescenceThicknessRange[1],ue.iridescenceMap&&(ae.iridescenceMap.value=ue.iridescenceMap,refreshTransformUniform(ue.iridescenceMap,ae.iridescenceMapTransform)),ue.iridescenceThicknessMap&&(ae.iridescenceThicknessMap.value=ue.iridescenceThicknessMap,refreshTransformUniform(ue.iridescenceThicknessMap,ae.iridescenceThicknessMapTransform)));ue.transmission>0&&(ae.transmission.value=ue.transmission,ae.transmissionSamplerMap.value=nt.texture,ae.transmissionSamplerSize.value.set(nt.width,nt.height),ue.transmissionMap&&(ae.transmissionMap.value=ue.transmissionMap,refreshTransformUniform(ue.transmissionMap,ae.transmissionMapTransform)),ae.thickness.value=ue.thickness,ue.thicknessMap&&(ae.thicknessMap.value=ue.thicknessMap,refreshTransformUniform(ue.thicknessMap,ae.thicknessMapTransform)),ae.attenuationDistance.value=ue.attenuationDistance,ae.attenuationColor.value.copy(ue.attenuationColor));ue.anisotropy>0&&(ae.anisotropyVector.value.set(ue.anisotropy*Math.cos(ue.anisotropyRotation),ue.anisotropy*Math.sin(ue.anisotropyRotation)),ue.anisotropyMap&&(ae.anisotropyMap.value=ue.anisotropyMap,refreshTransformUniform(ue.anisotropyMap,ae.anisotropyMapTransform)));ae.specularIntensity.value=ue.specularIntensity,ae.specularColor.value.copy(ue.specularColor),ue.specularColorMap&&(ae.specularColorMap.value=ue.specularColorMap,refreshTransformUniform(ue.specularColorMap,ae.specularColorMapTransform));ue.specularIntensityMap&&(ae.specularIntensityMap.value=ue.specularIntensityMap,refreshTransformUniform(ue.specularIntensityMap,ae.specularIntensityMapTransform))}(ae,nt,Xt)):nt.isMeshMatcapMaterial?(refreshUniformsCommon(ae,nt),function(ae,ue){ue.matcap&&(ae.matcap.value=ue.matcap)}(ae,nt)):nt.isMeshDepthMaterial?refreshUniformsCommon(ae,nt):nt.isMeshDistanceMaterial?(refreshUniformsCommon(ae,nt),function(ae,nt){const ut=ue.get(nt).light;ae.referencePosition.value.setFromMatrixPosition(ut.matrixWorld),ae.nearDistance.value=ut.shadow.camera.near,ae.farDistance.value=ut.shadow.camera.far}(ae,nt)):nt.isMeshNormalMaterial?refreshUniformsCommon(ae,nt):nt.isLineBasicMaterial?(function(ae,ue){ae.diffuse.value.copy(ue.color),ae.opacity.value=ue.opacity,ue.map&&(ae.map.value=ue.map,refreshTransformUniform(ue.map,ae.mapTransform))}(ae,nt),nt.isLineDashedMaterial&&function(ae,ue){ae.dashSize.value=ue.dashSize,ae.totalSize.value=ue.dashSize+ue.gapSize,ae.scale.value=ue.scale}(ae,nt)):nt.isPointsMaterial?function(ae,ue,nt,ut){ae.diffuse.value.copy(ue.color),ae.opacity.value=ue.opacity,ae.size.value=ue.size*nt,ae.scale.value=.5*ut,ue.map&&(ae.map.value=ue.map,refreshTransformUniform(ue.map,ae.uvTransform));ue.alphaMap&&(ae.alphaMap.value=ue.alphaMap,refreshTransformUniform(ue.alphaMap,ae.alphaMapTransform));ue.alphaTest>0&&(ae.alphaTest.value=ue.alphaTest)}(ae,nt,qt,Yt):nt.isSpriteMaterial?function(ae,ue){ae.diffuse.value.copy(ue.color),ae.opacity.value=ue.opacity,ae.rotation.value=ue.rotation,ue.map&&(ae.map.value=ue.map,refreshTransformUniform(ue.map,ae.mapTransform));ue.alphaMap&&(ae.alphaMap.value=ue.alphaMap,refreshTransformUniform(ue.alphaMap,ae.alphaMapTransform));ue.alphaTest>0&&(ae.alphaTest.value=ue.alphaTest)}(ae,nt):nt.isShadowMaterial?(ae.color.value.copy(nt.color),ae.opacity.value=nt.opacity):nt.isShaderMaterial&&(nt.uniformsNeedUpdate=!1)}}}function WebGLUniformsGroups(ae,ue,nt,ut){let qt={},Yt={},Xt=[];const ys=ae.getParameter(ae.MAX_UNIFORM_BUFFER_BINDINGS);function hasUniformChanged(ae,ue,nt,ut){const qt=ae.value,Yt=ue+"_"+nt;if(void 0===ut[Yt])return ut[Yt]="number"===typeof qt||"boolean"===typeof qt?qt:qt.clone(),!0;{const ae=ut[Yt];if("number"===typeof qt||"boolean"===typeof qt){if(ae!==qt)return ut[Yt]=qt,!0}else if(!1===ae.equals(qt))return ae.copy(qt),!0}return!1}function getUniformSize(ae){const ue={boundary:0,storage:0};return"number"===typeof ae||"boolean"===typeof ae?(ue.boundary=4,ue.storage=4):ae.isVector2?(ue.boundary=8,ue.storage=8):ae.isVector3||ae.isColor?(ue.boundary=16,ue.storage=12):ae.isVector4?(ue.boundary=16,ue.storage=16):ae.isMatrix3?(ue.boundary=48,ue.storage=48):ae.isMatrix4?(ue.boundary=64,ue.storage=64):ae.isTexture?console.warn("THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group."):console.warn("THREE.WebGLRenderer: Unsupported uniform value type.",ae),ue}function onUniformsGroupsDispose(ue){const nt=ue.target;nt.removeEventListener("dispose",onUniformsGroupsDispose);const ut=Xt.indexOf(nt.__bindingPointIndex);Xt.splice(ut,1),ae.deleteBuffer(qt[nt.id]),delete qt[nt.id],delete Yt[nt.id]}return{bind:function(ae,ue){const nt=ue.program;ut.uniformBlockBinding(ae,nt)},update:function(nt,Ec){let lu=qt[nt.id];void 0===lu&&(!function(ae){const ue=ae.uniforms;let nt=0;const ut=16;for(let Yt=0,Xt=ue.length;Yt<Xt;Yt++){const ae=Array.isArray(ue[Yt])?ue[Yt]:[ue[Yt]];for(let ue=0,qt=ae.length;ue<qt;ue++){const qt=ae[ue],Yt=Array.isArray(qt.value)?qt.value:[qt.value];for(let ae=0,ue=Yt.length;ae<ue;ae++){const ue=getUniformSize(Yt[ae]),Xt=nt%ut,ys=Xt%ue.boundary,Ec=Xt+ys;nt+=ys,0!==Ec&&ut-Ec<ue.storage&&(nt+=ut-Ec),qt.__data=new Float32Array(ue.storage/Float32Array.BYTES_PER_ELEMENT),qt.__offset=nt,nt+=ue.storage}}}const qt=nt%ut;qt>0&&(nt+=ut-qt);ae.__size=nt,ae.__cache={}}(nt),lu=function(ue){const nt=function(){for(let ae=0;ae<ys;ae++)if(-1===Xt.indexOf(ae))return Xt.push(ae),ae;return console.error("THREE.WebGLRenderer: Maximum number of simultaneously usable uniforms groups reached."),0}();ue.__bindingPointIndex=nt;const ut=ae.createBuffer(),qt=ue.__size,Yt=ue.usage;return ae.bindBuffer(ae.UNIFORM_BUFFER,ut),ae.bufferData(ae.UNIFORM_BUFFER,qt,Yt),ae.bindBuffer(ae.UNIFORM_BUFFER,null),ae.bindBufferBase(ae.UNIFORM_BUFFER,nt,ut),ut}(nt),qt[nt.id]=lu,nt.addEventListener("dispose",onUniformsGroupsDispose));const uu=Ec.program;ut.updateUBOMapping(nt,uu);const _u=ue.render.frame;Yt[nt.id]!==_u&&(!function(ue){const nt=qt[ue.id],ut=ue.uniforms,Yt=ue.__cache;ae.bindBuffer(ae.UNIFORM_BUFFER,nt);for(let qt=0,Xt=ut.length;qt<Xt;qt++){const ue=Array.isArray(ut[qt])?ut[qt]:[ut[qt]];for(let nt=0,ut=ue.length;nt<ut;nt++){const ut=ue[nt];if(!0===hasUniformChanged(ut,qt,nt,Yt)){const ue=ut.__offset,nt=Array.isArray(ut.value)?ut.value:[ut.value];let qt=0;for(let Yt=0;Yt<nt.length;Yt++){const Xt=nt[Yt],ys=getUniformSize(Xt);"number"===typeof Xt||"boolean"===typeof Xt?(ut.__data[0]=Xt,ae.bufferSubData(ae.UNIFORM_BUFFER,ue+qt,ut.__data)):Xt.isMatrix3?(ut.__data[0]=Xt.elements[0],ut.__data[1]=Xt.elements[1],ut.__data[2]=Xt.elements[2],ut.__data[3]=0,ut.__data[4]=Xt.elements[3],ut.__data[5]=Xt.elements[4],ut.__data[6]=Xt.elements[5],ut.__data[7]=0,ut.__data[8]=Xt.elements[6],ut.__data[9]=Xt.elements[7],ut.__data[10]=Xt.elements[8],ut.__data[11]=0):(Xt.toArray(ut.__data,qt),qt+=ys.storage/Float32Array.BYTES_PER_ELEMENT)}ae.bufferSubData(ae.UNIFORM_BUFFER,ue,ut.__data)}}}ae.bindBuffer(ae.UNIFORM_BUFFER,null)}(nt),Yt[nt.id]=_u)},dispose:function(){for(const ue in qt)ae.deleteBuffer(qt[ue]);Xt=[],qt={},Yt={}}}}class WebGLRenderer{constructor(ae){void 0===ae&&(ae={});const{canvas:ue=(0,ut.lPF)(),context:nt=null,depth:qt=!0,stencil:Yt=!1,alpha:Xt=!1,antialias:ys=!1,premultipliedAlpha:Ec=!0,preserveDrawingBuffer:lu=!1,powerPreference:uu="default",failIfMajorPerformanceCaveat:_u=!1,reversedDepthBuffer:vu=!1}=ae;let wu;if(this.isWebGLRenderer=!0,null!==nt){if("undefined"!==typeof WebGLRenderingContext&&nt instanceof WebGLRenderingContext)throw new Error("THREE.WebGLRenderer: WebGL 1 is not supported since r163.");wu=nt.getContextAttributes().alpha}else wu=Xt;const Hu=new Uint32Array(4),qu=new Int32Array(4);let Ju=null,_h=null;const ed=[],td=[];this.domElement=ue,this.debug={checkShaderErrors:!0,onShaderError:null},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.toneMapping=ut.y_p,this.toneMappingExposure=1,this.transmissionResolutionScale=1;const id=this;let nd=!1;this._outputColorSpace=ut.er$;let rd=0,ad=0,sd=null,od=-1,ld=null;const cd=new ut.IUQ,ud=new ut.IUQ;let hd=null;const dd=new ut.Q1f(0);let pd=0,md=ue.width,gd=ue.height,fd=1,Ad=null,yd=null;const _d=new ut.IUQ(0,0,md,gd),vd=new ut.IUQ(0,0,md,gd);let xd=!1;const bd=new ut.PPD;let wd=!1,Ed=!1;const Md=new ut.kn4,Sd=new ut.Pq0,Td=new ut.IUQ,kd={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};let Cd=!1;function getTargetPixelRatio(){return null===sd?fd:1}let Id,Dd,Ld,Pd,zd,Nd,Rd,Od,Bd,Fd,jd,Ud,Vd,Gd,Hd,Wd,qd,Zd,Yd,Qd,Kd,Xd,Jd,$d,Fp=nt;function getContext(ae,nt){return ue.getContext(ae,nt)}try{const ae={alpha:!0,depth:qt,stencil:Yt,antialias:ys,premultipliedAlpha:Ec,preserveDrawingBuffer:lu,powerPreference:uu,failIfMajorPerformanceCaveat:_u};if("setAttribute"in ue&&ue.setAttribute("data-engine",`three.js r${ut.sPf}`),ue.addEventListener("webglcontextlost",onContextLost,!1),ue.addEventListener("webglcontextrestored",onContextRestore,!1),ue.addEventListener("webglcontextcreationerror",onContextCreationError,!1),null===Fp){const ue="webgl2";if(Fp=getContext(ue,ae),null===Fp)throw getContext(ue)?new Error("Error creating WebGL context with your selected attributes."):new Error("Error creating WebGL context.")}}catch(Kp){throw console.error("THREE.WebGLRenderer: "+Kp.message),Kp}function initGLContext(){Id=new WebGLExtensions(Fp),Id.init(),Xd=new WebGLUtils(Fp,Id),Dd=new WebGLCapabilities(Fp,Id,ae,Xd),Ld=new WebGLState(Fp,Id),Dd.reversedDepthBuffer&&vu&&Ld.buffers.depth.setReversed(!0),Pd=new WebGLInfo(Fp),zd=new WebGLProperties,Nd=new WebGLTextures(Fp,Id,Ld,zd,Dd,Xd,Pd),Rd=new WebGLCubeMaps(id),Od=new WebGLCubeUVMaps(id),Bd=new WebGLAttributes(Fp),Jd=new WebGLBindingStates(Fp,Bd),Fd=new WebGLGeometries(Fp,Bd,Pd,Jd),jd=new WebGLObjects(Fp,Fd,Bd,Pd),Yd=new WebGLMorphtargets(Fp,Dd,Nd),Wd=new WebGLClipping(zd),Ud=new WebGLPrograms(id,Rd,Od,Id,Dd,Jd,Wd),Vd=new WebGLMaterials(id,zd),Gd=new WebGLRenderLists,Hd=new WebGLRenderStates(Id),Zd=new WebGLBackground(id,Rd,Od,Ld,jd,wu,Ec),qd=new WebGLShadowMap(id,jd,Dd),$d=new WebGLUniformsGroups(Fp,Pd,Dd,Ld),Qd=new WebGLBufferRenderer(Fp,Id,Pd),Kd=new WebGLIndexedBufferRenderer(Fp,Id,Pd),Pd.programs=Ud.programs,id.capabilities=Dd,id.extensions=Id,id.properties=zd,id.renderLists=Gd,id.shadowMap=qd,id.state=Ld,id.info=Pd}initGLContext();const Gp=new WebXRManager(id,Fp);function onContextLost(ae){ae.preventDefault(),console.log("THREE.WebGLRenderer: Context Lost."),nd=!0}function onContextRestore(){console.log("THREE.WebGLRenderer: Context Restored."),nd=!1;const ae=Pd.autoReset,ue=qd.enabled,nt=qd.autoUpdate,ut=qd.needsUpdate,qt=qd.type;initGLContext(),Pd.autoReset=ae,qd.enabled=ue,qd.autoUpdate=nt,qd.needsUpdate=ut,qd.type=qt}function onContextCreationError(ae){console.error("THREE.WebGLRenderer: A WebGL context could not be created. Reason: ",ae.statusMessage)}function onMaterialDispose(ae){const ue=ae.target;ue.removeEventListener("dispose",onMaterialDispose),function(ae){(function(ae){const ue=zd.get(ae).programs;void 0!==ue&&(ue.forEach((function(ae){Ud.releaseProgram(ae)})),ae.isShaderMaterial&&Ud.releaseShaderCache(ae))})(ae),zd.remove(ae)}(ue)}function prepareMaterial(ae,ue,nt){!0===ae.transparent&&ae.side===ut.$EB&&!1===ae.forceSinglePass?(ae.side=ut.hsX,ae.needsUpdate=!0,getProgram(ae,ue,nt),ae.side=ut.hB5,ae.needsUpdate=!0,getProgram(ae,ue,nt),ae.side=ut.$EB):getProgram(ae,ue,nt)}this.xr=Gp,this.getContext=function(){return Fp},this.getContextAttributes=function(){return Fp.getContextAttributes()},this.forceContextLoss=function(){const ae=Id.get("WEBGL_lose_context");ae&&ae.loseContext()},this.forceContextRestore=function(){const ae=Id.get("WEBGL_lose_context");ae&&ae.restoreContext()},this.getPixelRatio=function(){return fd},this.setPixelRatio=function(ae){void 0!==ae&&(fd=ae,this.setSize(md,gd,!1))},this.getSize=function(ae){return ae.set(md,gd)},this.setSize=function(ae,nt,ut){void 0===ut&&(ut=!0),Gp.isPresenting?console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting."):(md=ae,gd=nt,ue.width=Math.floor(ae*fd),ue.height=Math.floor(nt*fd),!0===ut&&(ue.style.width=ae+"px",ue.style.height=nt+"px"),this.setViewport(0,0,ae,nt))},this.getDrawingBufferSize=function(ae){return ae.set(md*fd,gd*fd).floor()},this.setDrawingBufferSize=function(ae,nt,ut){md=ae,gd=nt,fd=ut,ue.width=Math.floor(ae*ut),ue.height=Math.floor(nt*ut),this.setViewport(0,0,ae,nt)},this.getCurrentViewport=function(ae){return ae.copy(cd)},this.getViewport=function(ae){return ae.copy(_d)},this.setViewport=function(ae,ue,nt,ut){ae.isVector4?_d.set(ae.x,ae.y,ae.z,ae.w):_d.set(ae,ue,nt,ut),Ld.viewport(cd.copy(_d).multiplyScalar(fd).round())},this.getScissor=function(ae){return ae.copy(vd)},this.setScissor=function(ae,ue,nt,ut){ae.isVector4?vd.set(ae.x,ae.y,ae.z,ae.w):vd.set(ae,ue,nt,ut),Ld.scissor(ud.copy(vd).multiplyScalar(fd).round())},this.getScissorTest=function(){return xd},this.setScissorTest=function(ae){Ld.setScissorTest(xd=ae)},this.setOpaqueSort=function(ae){Ad=ae},this.setTransparentSort=function(ae){yd=ae},this.getClearColor=function(ae){return ae.copy(Zd.getClearColor())},this.setClearColor=function(){Zd.setClearColor(...arguments)},this.getClearAlpha=function(){return Zd.getClearAlpha()},this.setClearAlpha=function(){Zd.setClearAlpha(...arguments)},this.clear=function(ae,ue,nt){void 0===ae&&(ae=!0),void 0===ue&&(ue=!0),void 0===nt&&(nt=!0);let qt=0;if(ae){let ae=!1;if(null!==sd){const ue=sd.texture.format;ae=ue===ut.c90||ue===ut.TkQ||ue===ut.ZQM}if(ae){const ae=sd.texture.type,ue=ae===ut.OUM||ae===ut.bkx||ae===ut.cHt||ae===ut.V3x||ae===ut.Wew||ae===ut.gJ2,nt=Zd.getClearColor(),qt=Zd.getClearAlpha(),Yt=nt.r,Xt=nt.g,ys=nt.b;ue?(Hu[0]=Yt,Hu[1]=Xt,Hu[2]=ys,Hu[3]=qt,Fp.clearBufferuiv(Fp.COLOR,0,Hu)):(qu[0]=Yt,qu[1]=Xt,qu[2]=ys,qu[3]=qt,Fp.clearBufferiv(Fp.COLOR,0,qu))}else qt|=Fp.COLOR_BUFFER_BIT}ue&&(qt|=Fp.DEPTH_BUFFER_BIT),nt&&(qt|=Fp.STENCIL_BUFFER_BIT,this.state.buffers.stencil.setMask(4294967295)),Fp.clear(qt)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.dispose=function(){ue.removeEventListener("webglcontextlost",onContextLost,!1),ue.removeEventListener("webglcontextrestored",onContextRestore,!1),ue.removeEventListener("webglcontextcreationerror",onContextCreationError,!1),Zd.dispose(),Gd.dispose(),Hd.dispose(),zd.dispose(),Rd.dispose(),Od.dispose(),jd.dispose(),Jd.dispose(),$d.dispose(),Ud.dispose(),Gp.dispose(),Gp.removeEventListener("sessionstart",onXRSessionStart),Gp.removeEventListener("sessionend",onXRSessionEnd),Wp.stop()},this.renderBufferDirect=function(ae,ue,nt,qt,Yt,Xt){null===ue&&(ue=kd);const ys=Yt.isMesh&&Yt.matrixWorld.determinant()<0,Ec=function(ae,ue,nt,qt,Yt){!0!==ue.isScene&&(ue=kd);Nd.resetTextureUnits();const Xt=ue.fog,ys=qt.isMeshStandardMaterial?ue.environment:null,Ec=null===sd?id.outputColorSpace:!0===sd.isXRRenderTarget?sd.texture.colorSpace:ut.Zr2,lu=(qt.isMeshStandardMaterial?Od:Rd).get(qt.envMap||ys),uu=!0===qt.vertexColors&&!!nt.attributes.color&&4===nt.attributes.color.itemSize,_u=!!nt.attributes.tangent&&(!!qt.normalMap||qt.anisotropy>0),vu=!!nt.morphAttributes.position,wu=!!nt.morphAttributes.normal,Hu=!!nt.morphAttributes.color;let qu=ut.y_p;qt.toneMapped&&(null!==sd&&!0!==sd.isXRRenderTarget||(qu=id.toneMapping));const Ju=nt.morphAttributes.position||nt.morphAttributes.normal||nt.morphAttributes.color,ed=void 0!==Ju?Ju.length:0,td=zd.get(qt),nd=_h.state.lights;if(!0===wd&&(!0===Ed||ae!==ld)){const ue=ae===ld&&qt.id===od;Wd.setState(qt,ae,ue)}let rd=!1;qt.version===td.__version?td.needsLights&&td.lightsStateVersion!==nd.state.version||td.outputColorSpace!==Ec||Yt.isBatchedMesh&&!1===td.batching?rd=!0:Yt.isBatchedMesh||!0!==td.batching?Yt.isBatchedMesh&&!0===td.batchingColor&&null===Yt.colorTexture||Yt.isBatchedMesh&&!1===td.batchingColor&&null!==Yt.colorTexture||Yt.isInstancedMesh&&!1===td.instancing?rd=!0:Yt.isInstancedMesh||!0!==td.instancing?Yt.isSkinnedMesh&&!1===td.skinning?rd=!0:Yt.isSkinnedMesh||!0!==td.skinning?Yt.isInstancedMesh&&!0===td.instancingColor&&null===Yt.instanceColor||Yt.isInstancedMesh&&!1===td.instancingColor&&null!==Yt.instanceColor||Yt.isInstancedMesh&&!0===td.instancingMorph&&null===Yt.morphTexture||Yt.isInstancedMesh&&!1===td.instancingMorph&&null!==Yt.morphTexture||td.envMap!==lu||!0===qt.fog&&td.fog!==Xt?rd=!0:void 0===td.numClippingPlanes||td.numClippingPlanes===Wd.numPlanes&&td.numIntersection===Wd.numIntersection?(td.vertexAlphas!==uu||td.vertexTangents!==_u||td.morphTargets!==vu||td.morphNormals!==wu||td.morphColors!==Hu||td.toneMapping!==qu||td.morphTargetsCount!==ed)&&(rd=!0):rd=!0:rd=!0:rd=!0:rd=!0:(rd=!0,td.__version=qt.version);let ad=td.currentProgram;!0===rd&&(ad=getProgram(qt,ue,Yt));let cd=!1,ud=!1,hd=!1;const dd=ad.getUniforms(),pd=td.uniforms;Ld.useProgram(ad.program)&&(cd=!0,ud=!0,hd=!0);qt.id!==od&&(od=qt.id,ud=!0);if(cd||ld!==ae){Ld.buffers.depth.getReversed()&&!0!==ae.reversedDepth&&(ae._reversedDepth=!0,ae.updateProjectionMatrix()),dd.setValue(Fp,"projectionMatrix",ae.projectionMatrix),dd.setValue(Fp,"viewMatrix",ae.matrixWorldInverse);const ue=dd.map.cameraPosition;void 0!==ue&&ue.setValue(Fp,Sd.setFromMatrixPosition(ae.matrixWorld)),Dd.logarithmicDepthBuffer&&dd.setValue(Fp,"logDepthBufFC",2/(Math.log(ae.far+1)/Math.LN2)),(qt.isMeshPhongMaterial||qt.isMeshToonMaterial||qt.isMeshLambertMaterial||qt.isMeshBasicMaterial||qt.isMeshStandardMaterial||qt.isShaderMaterial)&&dd.setValue(Fp,"isOrthographic",!0===ae.isOrthographicCamera),ld!==ae&&(ld=ae,ud=!0,hd=!0)}if(Yt.isSkinnedMesh){dd.setOptional(Fp,Yt,"bindMatrix"),dd.setOptional(Fp,Yt,"bindMatrixInverse");const ae=Yt.skeleton;ae&&(null===ae.boneTexture&&ae.computeBoneTexture(),dd.setValue(Fp,"boneTexture",ae.boneTexture,Nd))}Yt.isBatchedMesh&&(dd.setOptional(Fp,Yt,"batchingTexture"),dd.setValue(Fp,"batchingTexture",Yt._matricesTexture,Nd),dd.setOptional(Fp,Yt,"batchingIdTexture"),dd.setValue(Fp,"batchingIdTexture",Yt._indirectTexture,Nd),dd.setOptional(Fp,Yt,"batchingColorTexture"),null!==Yt._colorsTexture&&dd.setValue(Fp,"batchingColorTexture",Yt._colorsTexture,Nd));const md=nt.morphAttributes;void 0===md.position&&void 0===md.normal&&void 0===md.color||Yd.update(Yt,nt,ad);(ud||td.receiveShadow!==Yt.receiveShadow)&&(td.receiveShadow=Yt.receiveShadow,dd.setValue(Fp,"receiveShadow",Yt.receiveShadow));qt.isMeshGouraudMaterial&&null!==qt.envMap&&(pd.envMap.value=lu,pd.flipEnvMap.value=lu.isCubeTexture&&!1===lu.isRenderTargetTexture?-1:1);qt.isMeshStandardMaterial&&null===qt.envMap&&null!==ue.environment&&(pd.envMapIntensity.value=ue.environmentIntensity);ud&&(dd.setValue(Fp,"toneMappingExposure",id.toneMappingExposure),td.needsLights&&(yd=hd,(Ad=pd).ambientLightColor.needsUpdate=yd,Ad.lightProbe.needsUpdate=yd,Ad.directionalLights.needsUpdate=yd,Ad.directionalLightShadows.needsUpdate=yd,Ad.pointLights.needsUpdate=yd,Ad.pointLightShadows.needsUpdate=yd,Ad.spotLights.needsUpdate=yd,Ad.spotLightShadows.needsUpdate=yd,Ad.rectAreaLights.needsUpdate=yd,Ad.hemisphereLights.needsUpdate=yd),Xt&&!0===qt.fog&&Vd.refreshFogUniforms(pd,Xt),Vd.refreshMaterialUniforms(pd,qt,fd,gd,_h.state.transmissionRenderTarget[ae.id]),WebGLUniforms.upload(Fp,getUniformList(td),pd,Nd));var Ad,yd;qt.isShaderMaterial&&!0===qt.uniformsNeedUpdate&&(WebGLUniforms.upload(Fp,getUniformList(td),pd,Nd),qt.uniformsNeedUpdate=!1);qt.isSpriteMaterial&&dd.setValue(Fp,"center",Yt.center);if(dd.setValue(Fp,"modelViewMatrix",Yt.modelViewMatrix),dd.setValue(Fp,"normalMatrix",Yt.normalMatrix),dd.setValue(Fp,"modelMatrix",Yt.matrixWorld),qt.isShaderMaterial||qt.isRawShaderMaterial){const ae=qt.uniformsGroups;for(let ue=0,nt=ae.length;ue<nt;ue++){const nt=ae[ue];$d.update(nt,ad),$d.bind(nt,ad)}}return ad}(ae,ue,nt,qt,Yt);Ld.setMaterial(qt,ys);let lu=nt.index,uu=1;if(!0===qt.wireframe){if(lu=Fd.getWireframeAttribute(nt),void 0===lu)return;uu=2}const _u=nt.drawRange,vu=nt.attributes.position;let wu=_u.start*uu,Hu=(_u.start+_u.count)*uu;null!==Xt&&(wu=Math.max(wu,Xt.start*uu),Hu=Math.min(Hu,(Xt.start+Xt.count)*uu)),null!==lu?(wu=Math.max(wu,0),Hu=Math.min(Hu,lu.count)):void 0!==vu&&null!==vu&&(wu=Math.max(wu,0),Hu=Math.min(Hu,vu.count));const qu=Hu-wu;if(qu<0||qu===1/0)return;let Ju;Jd.setup(Yt,qt,Ec,nt,lu);let ed=Qd;if(null!==lu&&(Ju=Bd.get(lu),ed=Kd,ed.setIndex(Ju)),Yt.isMesh)!0===qt.wireframe?(Ld.setLineWidth(qt.wireframeLinewidth*getTargetPixelRatio()),ed.setMode(Fp.LINES)):ed.setMode(Fp.TRIANGLES);else if(Yt.isLine){let ae=qt.linewidth;void 0===ae&&(ae=1),Ld.setLineWidth(ae*getTargetPixelRatio()),Yt.isLineSegments?ed.setMode(Fp.LINES):Yt.isLineLoop?ed.setMode(Fp.LINE_LOOP):ed.setMode(Fp.LINE_STRIP)}else Yt.isPoints?ed.setMode(Fp.POINTS):Yt.isSprite&&ed.setMode(Fp.TRIANGLES);if(Yt.isBatchedMesh)if(null!==Yt._multiDrawInstances)(0,ut.mcG)("THREE.WebGLRenderer: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection."),ed.renderMultiDrawInstances(Yt._multiDrawStarts,Yt._multiDrawCounts,Yt._multiDrawCount,Yt._multiDrawInstances);else if(Id.get("WEBGL_multi_draw"))ed.renderMultiDraw(Yt._multiDrawStarts,Yt._multiDrawCounts,Yt._multiDrawCount);else{const ae=Yt._multiDrawStarts,ue=Yt._multiDrawCounts,nt=Yt._multiDrawCount,ut=lu?Bd.get(lu).bytesPerElement:1,Xt=zd.get(qt).currentProgram.getUniforms();for(let qt=0;qt<nt;qt++)Xt.setValue(Fp,"_gl_DrawID",qt),ed.render(ae[qt]/ut,ue[qt])}else if(Yt.isInstancedMesh)ed.renderInstances(wu,qu,Yt.count);else if(nt.isInstancedBufferGeometry){const ae=void 0!==nt._maxInstanceCount?nt._maxInstanceCount:1/0,ue=Math.min(nt.instanceCount,ae);ed.renderInstances(wu,qu,ue)}else ed.render(wu,qu)},this.compile=function(ae,ue,nt){void 0===nt&&(nt=null),null===nt&&(nt=ae),_h=Hd.get(nt),_h.init(ue),td.push(_h),nt.traverseVisible((function(ae){ae.isLight&&ae.layers.test(ue.layers)&&(_h.pushLight(ae),ae.castShadow&&_h.pushShadow(ae))})),ae!==nt&&ae.traverseVisible((function(ae){ae.isLight&&ae.layers.test(ue.layers)&&(_h.pushLight(ae),ae.castShadow&&_h.pushShadow(ae))})),_h.setupLights();const ut=new Set;return ae.traverse((function(ae){if(!(ae.isMesh||ae.isPoints||ae.isLine||ae.isSprite))return;const ue=ae.material;if(ue)if(Array.isArray(ue))for(let qt=0;qt<ue.length;qt++){const Yt=ue[qt];prepareMaterial(Yt,nt,ae),ut.add(Yt)}else prepareMaterial(ue,nt,ae),ut.add(ue)})),_h=td.pop(),ut},this.compileAsync=function(ae,ue,nt){void 0===nt&&(nt=null);const ut=this.compile(ae,ue,nt);return new Promise((ue=>{function checkMaterialsReady(){ut.forEach((function(ae){zd.get(ae).currentProgram.isReady()&&ut.delete(ae)})),0!==ut.size?setTimeout(checkMaterialsReady,10):ue(ae)}null!==Id.get("KHR_parallel_shader_compile")?checkMaterialsReady():setTimeout(checkMaterialsReady,10)}))};let Hp=null;function onXRSessionStart(){Wp.stop()}function onXRSessionEnd(){Wp.start()}const Wp=new WebGLAnimation;function projectObject(ae,ue,nt,ut){if(!1===ae.visible)return;if(ae.layers.test(ue.layers))if(ae.isGroup)nt=ae.renderOrder;else if(ae.isLOD)!0===ae.autoUpdate&&ae.update(ue);else if(ae.isLight)_h.pushLight(ae),ae.castShadow&&_h.pushShadow(ae);else if(ae.isSprite){if(!ae.frustumCulled||bd.intersectsSprite(ae)){ut&&Td.setFromMatrixPosition(ae.matrixWorld).applyMatrix4(Md);const ue=jd.update(ae),qt=ae.material;qt.visible&&Ju.push(ae,ue,qt,nt,Td.z,null)}}else if((ae.isMesh||ae.isLine||ae.isPoints)&&(!ae.frustumCulled||bd.intersectsObject(ae))){const ue=jd.update(ae),qt=ae.material;if(ut&&(void 0!==ae.boundingSphere?(null===ae.boundingSphere&&ae.computeBoundingSphere(),Td.copy(ae.boundingSphere.center)):(null===ue.boundingSphere&&ue.computeBoundingSphere(),Td.copy(ue.boundingSphere.center)),Td.applyMatrix4(ae.matrixWorld).applyMatrix4(Md)),Array.isArray(qt)){const ut=ue.groups;for(let Yt=0,Xt=ut.length;Yt<Xt;Yt++){const Xt=ut[Yt],ys=qt[Xt.materialIndex];ys&&ys.visible&&Ju.push(ae,ue,ys,nt,Td.z,Xt)}}else qt.visible&&Ju.push(ae,ue,qt,nt,Td.z,null)}const qt=ae.children;for(let Yt=0,Xt=qt.length;Yt<Xt;Yt++)projectObject(qt[Yt],ue,nt,ut)}function renderScene(ae,ue,nt,ut){const qt=ae.opaque,Yt=ae.transmissive,Xt=ae.transparent;_h.setupLightsView(nt),!0===wd&&Wd.setGlobalState(id.clippingPlanes,nt),ut&&Ld.viewport(cd.copy(ut)),qt.length>0&&renderObjects(qt,ue,nt),Yt.length>0&&renderObjects(Yt,ue,nt),Xt.length>0&&renderObjects(Xt,ue,nt),Ld.buffers.depth.setTest(!0),Ld.buffers.depth.setMask(!0),Ld.buffers.color.setMask(!0),Ld.setPolygonOffset(!1)}function renderTransmissionPass(ae,ue,nt,qt){if(null!==(!0===nt.isScene?nt.overrideMaterial:null))return;void 0===_h.state.transmissionRenderTarget[qt.id]&&(_h.state.transmissionRenderTarget[qt.id]=new ut.nWS(1,1,{generateMipmaps:!0,type:Id.has("EXT_color_buffer_half_float")||Id.has("EXT_color_buffer_float")?ut.ix0:ut.OUM,minFilter:ut.$_I,samples:4,stencilBuffer:Yt,resolveDepthBuffer:!1,resolveStencilBuffer:!1,colorSpace:ut.ppV.workingColorSpace}));const Xt=_h.state.transmissionRenderTarget[qt.id],ys=qt.viewport||cd;Xt.setSize(ys.z*id.transmissionResolutionScale,ys.w*id.transmissionResolutionScale);const Ec=id.getRenderTarget(),lu=id.getActiveCubeFace(),uu=id.getActiveMipmapLevel();id.setRenderTarget(Xt),id.getClearColor(dd),pd=id.getClearAlpha(),pd<1&&id.setClearColor(16777215,.5),id.clear(),Cd&&Zd.render(nt);const _u=id.toneMapping;id.toneMapping=ut.y_p;const vu=qt.viewport;if(void 0!==qt.viewport&&(qt.viewport=void 0),_h.setupLightsView(qt),!0===wd&&Wd.setGlobalState(id.clippingPlanes,qt),renderObjects(ae,nt,qt),Nd.updateMultisampleRenderTarget(Xt),Nd.updateRenderTargetMipmap(Xt),!1===Id.has("WEBGL_multisampled_render_to_texture")){let ae=!1;for(let Yt=0,Xt=ue.length;Yt<Xt;Yt++){const Xt=ue[Yt],ys=Xt.object,Ec=Xt.geometry,lu=Xt.material,uu=Xt.group;if(lu.side===ut.$EB&&ys.layers.test(qt.layers)){const ue=lu.side;lu.side=ut.hsX,lu.needsUpdate=!0,renderObject(ys,nt,qt,Ec,lu,uu),lu.side=ue,lu.needsUpdate=!0,ae=!0}}!0===ae&&(Nd.updateMultisampleRenderTarget(Xt),Nd.updateRenderTargetMipmap(Xt))}id.setRenderTarget(Ec,lu,uu),id.setClearColor(dd,pd),void 0!==vu&&(qt.viewport=vu),id.toneMapping=_u}function renderObjects(ae,ue,nt){const ut=!0===ue.isScene?ue.overrideMaterial:null;for(let qt=0,Yt=ae.length;qt<Yt;qt++){const Yt=ae[qt],Xt=Yt.object,ys=Yt.geometry,Ec=Yt.group;let lu=Yt.material;!0===lu.allowOverride&&null!==ut&&(lu=ut),Xt.layers.test(nt.layers)&&renderObject(Xt,ue,nt,ys,lu,Ec)}}function renderObject(ae,ue,nt,qt,Yt,Xt){ae.onBeforeRender(id,ue,nt,qt,Yt,Xt),ae.modelViewMatrix.multiplyMatrices(nt.matrixWorldInverse,ae.matrixWorld),ae.normalMatrix.getNormalMatrix(ae.modelViewMatrix),Yt.onBeforeRender(id,ue,nt,qt,ae,Xt),!0===Yt.transparent&&Yt.side===ut.$EB&&!1===Yt.forceSinglePass?(Yt.side=ut.hsX,Yt.needsUpdate=!0,id.renderBufferDirect(nt,ue,qt,Yt,ae,Xt),Yt.side=ut.hB5,Yt.needsUpdate=!0,id.renderBufferDirect(nt,ue,qt,Yt,ae,Xt),Yt.side=ut.$EB):id.renderBufferDirect(nt,ue,qt,Yt,ae,Xt),ae.onAfterRender(id,ue,nt,qt,Yt,Xt)}function getProgram(ae,ue,nt){!0!==ue.isScene&&(ue=kd);const ut=zd.get(ae),qt=_h.state.lights,Yt=_h.state.shadowsArray,Xt=qt.state.version,ys=Ud.getParameters(ae,qt.state,Yt,ue,nt),Ec=Ud.getProgramCacheKey(ys);let lu=ut.programs;ut.environment=ae.isMeshStandardMaterial?ue.environment:null,ut.fog=ue.fog,ut.envMap=(ae.isMeshStandardMaterial?Od:Rd).get(ae.envMap||ut.environment),ut.envMapRotation=null!==ut.environment&&null===ae.envMap?ue.environmentRotation:ae.envMapRotation,void 0===lu&&(ae.addEventListener("dispose",onMaterialDispose),lu=new Map,ut.programs=lu);let uu=lu.get(Ec);if(void 0!==uu){if(ut.currentProgram===uu&&ut.lightsStateVersion===Xt)return updateCommonMaterialProperties(ae,ys),uu}else ys.uniforms=Ud.getUniforms(ae),ae.onBeforeCompile(ys,id),uu=Ud.acquireProgram(ys,Ec),lu.set(Ec,uu),ut.uniforms=ys.uniforms;const _u=ut.uniforms;return(ae.isShaderMaterial||ae.isRawShaderMaterial)&&!0!==ae.clipping||(_u.clippingPlanes=Wd.uniform),updateCommonMaterialProperties(ae,ys),ut.needsLights=function(ae){return ae.isMeshLambertMaterial||ae.isMeshToonMaterial||ae.isMeshPhongMaterial||ae.isMeshStandardMaterial||ae.isShadowMaterial||ae.isShaderMaterial&&!0===ae.lights}(ae),ut.lightsStateVersion=Xt,ut.needsLights&&(_u.ambientLightColor.value=qt.state.ambient,_u.lightProbe.value=qt.state.probe,_u.directionalLights.value=qt.state.directional,_u.directionalLightShadows.value=qt.state.directionalShadow,_u.spotLights.value=qt.state.spot,_u.spotLightShadows.value=qt.state.spotShadow,_u.rectAreaLights.value=qt.state.rectArea,_u.ltc_1.value=qt.state.rectAreaLTC1,_u.ltc_2.value=qt.state.rectAreaLTC2,_u.pointLights.value=qt.state.point,_u.pointLightShadows.value=qt.state.pointShadow,_u.hemisphereLights.value=qt.state.hemi,_u.directionalShadowMap.value=qt.state.directionalShadowMap,_u.directionalShadowMatrix.value=qt.state.directionalShadowMatrix,_u.spotShadowMap.value=qt.state.spotShadowMap,_u.spotLightMatrix.value=qt.state.spotLightMatrix,_u.spotLightMap.value=qt.state.spotLightMap,_u.pointShadowMap.value=qt.state.pointShadowMap,_u.pointShadowMatrix.value=qt.state.pointShadowMatrix),ut.currentProgram=uu,ut.uniformsList=null,uu}function getUniformList(ae){if(null===ae.uniformsList){const ue=ae.currentProgram.getUniforms();ae.uniformsList=WebGLUniforms.seqWithValue(ue.seq,ae.uniforms)}return ae.uniformsList}function updateCommonMaterialProperties(ae,ue){const nt=zd.get(ae);nt.outputColorSpace=ue.outputColorSpace,nt.batching=ue.batching,nt.batchingColor=ue.batchingColor,nt.instancing=ue.instancing,nt.instancingColor=ue.instancingColor,nt.instancingMorph=ue.instancingMorph,nt.skinning=ue.skinning,nt.morphTargets=ue.morphTargets,nt.morphNormals=ue.morphNormals,nt.morphColors=ue.morphColors,nt.morphTargetsCount=ue.morphTargetsCount,nt.numClippingPlanes=ue.numClippingPlanes,nt.numIntersection=ue.numClipIntersection,nt.vertexAlphas=ue.vertexAlphas,nt.vertexTangents=ue.vertexTangents,nt.toneMapping=ue.toneMapping}Wp.setAnimationLoop((function(ae){Hp&&Hp(ae)})),"undefined"!==typeof self&&Wp.setContext(self),this.setAnimationLoop=function(ae){Hp=ae,Gp.setAnimationLoop(ae),null===ae?Wp.stop():Wp.start()},Gp.addEventListener("sessionstart",onXRSessionStart),Gp.addEventListener("sessionend",onXRSessionEnd),this.render=function(ae,ue){if(void 0!==ue&&!0!==ue.isCamera)return void console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");if(!0===nd)return;if(!0===ae.matrixWorldAutoUpdate&&ae.updateMatrixWorld(),null===ue.parent&&!0===ue.matrixWorldAutoUpdate&&ue.updateMatrixWorld(),!0===Gp.enabled&&!0===Gp.isPresenting&&(!0===Gp.cameraAutoUpdate&&Gp.updateCamera(ue),ue=Gp.getCamera()),!0===ae.isScene&&ae.onBeforeRender(id,ae,ue,sd),_h=Hd.get(ae,td.length),_h.init(ue),td.push(_h),Md.multiplyMatrices(ue.projectionMatrix,ue.matrixWorldInverse),bd.setFromProjectionMatrix(Md,ut.TdN,ue.reversedDepth),Ed=this.localClippingEnabled,wd=Wd.init(this.clippingPlanes,Ed),Ju=Gd.get(ae,ed.length),Ju.init(),ed.push(Ju),!0===Gp.enabled&&!0===Gp.isPresenting){const ae=id.xr.getDepthSensingMesh();null!==ae&&projectObject(ae,ue,-1/0,id.sortObjects)}projectObject(ae,ue,0,id.sortObjects),Ju.finish(),!0===id.sortObjects&&Ju.sort(Ad,yd),Cd=!1===Gp.enabled||!1===Gp.isPresenting||!1===Gp.hasDepthSensing(),Cd&&Zd.addToRenderList(Ju,ae),this.info.render.frame++,!0===wd&&Wd.beginShadows();const nt=_h.state.shadowsArray;qd.render(nt,ae,ue),!0===wd&&Wd.endShadows(),!0===this.info.autoReset&&this.info.reset();const qt=Ju.opaque,Yt=Ju.transmissive;if(_h.setupLights(),ue.isArrayCamera){const nt=ue.cameras;if(Yt.length>0)for(let ue=0,ut=nt.length;ue<ut;ue++){renderTransmissionPass(qt,Yt,ae,nt[ue])}Cd&&Zd.render(ae);for(let ue=0,ut=nt.length;ue<ut;ue++){const ut=nt[ue];renderScene(Ju,ae,ut,ut.viewport)}}else Yt.length>0&&renderTransmissionPass(qt,Yt,ae,ue),Cd&&Zd.render(ae),renderScene(Ju,ae,ue);null!==sd&&0===ad&&(Nd.updateMultisampleRenderTarget(sd),Nd.updateRenderTargetMipmap(sd)),!0===ae.isScene&&ae.onAfterRender(id,ae,ue),Jd.resetDefaultState(),od=-1,ld=null,td.pop(),td.length>0?(_h=td[td.length-1],!0===wd&&Wd.setGlobalState(id.clippingPlanes,_h.state.camera)):_h=null,ed.pop(),Ju=ed.length>0?ed[ed.length-1]:null},this.getActiveCubeFace=function(){return rd},this.getActiveMipmapLevel=function(){return ad},this.getRenderTarget=function(){return sd},this.setRenderTargetTextures=function(ae,ue,nt){const ut=zd.get(ae);ut.__autoAllocateDepthBuffer=!1===ae.resolveDepthBuffer,!1===ut.__autoAllocateDepthBuffer&&(ut.__useRenderToTexture=!1),zd.get(ae.texture).__webglTexture=ue,zd.get(ae.depthTexture).__webglTexture=ut.__autoAllocateDepthBuffer?void 0:nt,ut.__hasExternalTextures=!0},this.setRenderTargetFramebuffer=function(ae,ue){const nt=zd.get(ae);nt.__webglFramebuffer=ue,nt.__useDefaultFramebuffer=void 0===ue};const Zp=Fp.createFramebuffer();this.setRenderTarget=function(ae,ue,nt){void 0===ue&&(ue=0),void 0===nt&&(nt=0),sd=ae,rd=ue,ad=nt;let ut=!0,qt=null,Yt=!1,Xt=!1;if(ae){const ys=zd.get(ae);if(void 0!==ys.__useDefaultFramebuffer)Ld.bindFramebuffer(Fp.FRAMEBUFFER,null),ut=!1;else if(void 0===ys.__webglFramebuffer)Nd.setupRenderTarget(ae);else if(ys.__hasExternalTextures)Nd.rebindTextures(ae,zd.get(ae.texture).__webglTexture,zd.get(ae.depthTexture).__webglTexture);else if(ae.depthBuffer){const ue=ae.depthTexture;if(ys.__boundDepthTexture!==ue){if(null!==ue&&zd.has(ue)&&(ae.width!==ue.image.width||ae.height!==ue.image.height))throw new Error("WebGLRenderTarget: Attached DepthTexture is initialized to the incorrect size.");Nd.setupDepthRenderbuffer(ae)}}const Ec=ae.texture;(Ec.isData3DTexture||Ec.isDataArrayTexture||Ec.isCompressedArrayTexture)&&(Xt=!0);const lu=zd.get(ae).__webglFramebuffer;ae.isWebGLCubeRenderTarget?(qt=Array.isArray(lu[ue])?lu[ue][nt]:lu[ue],Yt=!0):qt=ae.samples>0&&!1===Nd.useMultisampledRTT(ae)?zd.get(ae).__webglMultisampledFramebuffer:Array.isArray(lu)?lu[nt]:lu,cd.copy(ae.viewport),ud.copy(ae.scissor),hd=ae.scissorTest}else cd.copy(_d).multiplyScalar(fd).floor(),ud.copy(vd).multiplyScalar(fd).floor(),hd=xd;0!==nt&&(qt=Zp);if(Ld.bindFramebuffer(Fp.FRAMEBUFFER,qt)&&ut&&Ld.drawBuffers(ae,qt),Ld.viewport(cd),Ld.scissor(ud),Ld.setScissorTest(hd),Yt){const ut=zd.get(ae.texture);Fp.framebufferTexture2D(Fp.FRAMEBUFFER,Fp.COLOR_ATTACHMENT0,Fp.TEXTURE_CUBE_MAP_POSITIVE_X+ue,ut.__webglTexture,nt)}else if(Xt){const ut=ue;for(let ue=0;ue<ae.textures.length;ue++){const qt=zd.get(ae.textures[ue]);Fp.framebufferTextureLayer(Fp.FRAMEBUFFER,Fp.COLOR_ATTACHMENT0+ue,qt.__webglTexture,nt,ut)}}else if(null!==ae&&0!==nt){const ue=zd.get(ae.texture);Fp.framebufferTexture2D(Fp.FRAMEBUFFER,Fp.COLOR_ATTACHMENT0,Fp.TEXTURE_2D,ue.__webglTexture,nt)}od=-1},this.readRenderTargetPixels=function(ae,ue,nt,ut,qt,Yt,Xt,ys){if(void 0===ys&&(ys=0),!ae||!ae.isWebGLRenderTarget)return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let Ec=zd.get(ae).__webglFramebuffer;if(ae.isWebGLCubeRenderTarget&&void 0!==Xt&&(Ec=Ec[Xt]),Ec){Ld.bindFramebuffer(Fp.FRAMEBUFFER,Ec);try{const Xt=ae.textures[ys],Ec=Xt.format,lu=Xt.type;if(!Dd.textureFormatReadable(Ec))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");if(!Dd.textureTypeReadable(lu))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");ue>=0&&ue<=ae.width-ut&&nt>=0&&nt<=ae.height-qt&&(ae.textures.length>1&&Fp.readBuffer(Fp.COLOR_ATTACHMENT0+ys),Fp.readPixels(ue,nt,ut,qt,Xd.convert(Ec),Xd.convert(lu),Yt))}finally{const ae=null!==sd?zd.get(sd).__webglFramebuffer:null;Ld.bindFramebuffer(Fp.FRAMEBUFFER,ae)}}},this.readRenderTargetPixelsAsync=async function(ae,ue,nt,qt,Yt,Xt,ys,Ec){if(void 0===Ec&&(Ec=0),!ae||!ae.isWebGLRenderTarget)throw new Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let lu=zd.get(ae).__webglFramebuffer;if(ae.isWebGLCubeRenderTarget&&void 0!==ys&&(lu=lu[ys]),lu){if(ue>=0&&ue<=ae.width-qt&&nt>=0&&nt<=ae.height-Yt){Ld.bindFramebuffer(Fp.FRAMEBUFFER,lu);const ys=ae.textures[Ec],uu=ys.format,_u=ys.type;if(!Dd.textureFormatReadable(uu))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.");if(!Dd.textureTypeReadable(_u))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.");const vu=Fp.createBuffer();Fp.bindBuffer(Fp.PIXEL_PACK_BUFFER,vu),Fp.bufferData(Fp.PIXEL_PACK_BUFFER,Xt.byteLength,Fp.STREAM_READ),ae.textures.length>1&&Fp.readBuffer(Fp.COLOR_ATTACHMENT0+Ec),Fp.readPixels(ue,nt,qt,Yt,Xd.convert(uu),Xd.convert(_u),0);const wu=null!==sd?zd.get(sd).__webglFramebuffer:null;Ld.bindFramebuffer(Fp.FRAMEBUFFER,wu);const Hu=Fp.fenceSync(Fp.SYNC_GPU_COMMANDS_COMPLETE,0);return Fp.flush(),await(0,ut.jej)(Fp,Hu,4),Fp.bindBuffer(Fp.PIXEL_PACK_BUFFER,vu),Fp.getBufferSubData(Fp.PIXEL_PACK_BUFFER,0,Xt),Fp.deleteBuffer(vu),Fp.deleteSync(Hu),Xt}throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.")}},this.copyFramebufferToTexture=function(ae,ue,nt){void 0===ue&&(ue=null),void 0===nt&&(nt=0);const ut=Math.pow(2,-nt),qt=Math.floor(ae.image.width*ut),Yt=Math.floor(ae.image.height*ut),Xt=null!==ue?ue.x:0,ys=null!==ue?ue.y:0;Nd.setTexture2D(ae,0),Fp.copyTexSubImage2D(Fp.TEXTURE_2D,nt,0,0,Xt,ys,qt,Yt),Ld.unbindTexture()};const Yp=Fp.createFramebuffer(),Qp=Fp.createFramebuffer();this.copyTextureToTexture=function(ae,ue,nt,qt,Yt,Xt){let ys,Ec,lu,uu,_u,vu,wu,Hu,qu;void 0===nt&&(nt=null),void 0===qt&&(qt=null),void 0===Yt&&(Yt=0),void 0===Xt&&(Xt=null),null===Xt&&(0!==Yt?((0,ut.mcG)("WebGLRenderer: copyTextureToTexture function signature has changed to support src and dst mipmap levels."),Xt=Yt,Yt=0):Xt=0);const Ju=ae.isCompressedTexture?ae.mipmaps[Xt]:ae.image;if(null!==nt)ys=nt.max.x-nt.min.x,Ec=nt.max.y-nt.min.y,lu=nt.isBox3?nt.max.z-nt.min.z:1,uu=nt.min.x,_u=nt.min.y,vu=nt.isBox3?nt.min.z:0;else{const ue=Math.pow(2,-Yt);ys=Math.floor(Ju.width*ue),Ec=Math.floor(Ju.height*ue),lu=ae.isDataArrayTexture?Ju.depth:ae.isData3DTexture?Math.floor(Ju.depth*ue):1,uu=0,_u=0,vu=0}null!==qt?(wu=qt.x,Hu=qt.y,qu=qt.z):(wu=0,Hu=0,qu=0);const _h=Xd.convert(ue.format),ed=Xd.convert(ue.type);let td;ue.isData3DTexture?(Nd.setTexture3D(ue,0),td=Fp.TEXTURE_3D):ue.isDataArrayTexture||ue.isCompressedArrayTexture?(Nd.setTexture2DArray(ue,0),td=Fp.TEXTURE_2D_ARRAY):(Nd.setTexture2D(ue,0),td=Fp.TEXTURE_2D),Fp.pixelStorei(Fp.UNPACK_FLIP_Y_WEBGL,ue.flipY),Fp.pixelStorei(Fp.UNPACK_PREMULTIPLY_ALPHA_WEBGL,ue.premultiplyAlpha),Fp.pixelStorei(Fp.UNPACK_ALIGNMENT,ue.unpackAlignment);const id=Fp.getParameter(Fp.UNPACK_ROW_LENGTH),nd=Fp.getParameter(Fp.UNPACK_IMAGE_HEIGHT),rd=Fp.getParameter(Fp.UNPACK_SKIP_PIXELS),ad=Fp.getParameter(Fp.UNPACK_SKIP_ROWS),sd=Fp.getParameter(Fp.UNPACK_SKIP_IMAGES);Fp.pixelStorei(Fp.UNPACK_ROW_LENGTH,Ju.width),Fp.pixelStorei(Fp.UNPACK_IMAGE_HEIGHT,Ju.height),Fp.pixelStorei(Fp.UNPACK_SKIP_PIXELS,uu),Fp.pixelStorei(Fp.UNPACK_SKIP_ROWS,_u),Fp.pixelStorei(Fp.UNPACK_SKIP_IMAGES,vu);const od=ae.isDataArrayTexture||ae.isData3DTexture,ld=ue.isDataArrayTexture||ue.isData3DTexture;if(ae.isDepthTexture){const nt=zd.get(ae),ut=zd.get(ue),qt=zd.get(nt.__renderTarget),Ju=zd.get(ut.__renderTarget);Ld.bindFramebuffer(Fp.READ_FRAMEBUFFER,qt.__webglFramebuffer),Ld.bindFramebuffer(Fp.DRAW_FRAMEBUFFER,Ju.__webglFramebuffer);for(let _h=0;_h<lu;_h++)od&&(Fp.framebufferTextureLayer(Fp.READ_FRAMEBUFFER,Fp.COLOR_ATTACHMENT0,zd.get(ae).__webglTexture,Yt,vu+_h),Fp.framebufferTextureLayer(Fp.DRAW_FRAMEBUFFER,Fp.COLOR_ATTACHMENT0,zd.get(ue).__webglTexture,Xt,qu+_h)),Fp.blitFramebuffer(uu,_u,ys,Ec,wu,Hu,ys,Ec,Fp.DEPTH_BUFFER_BIT,Fp.NEAREST);Ld.bindFramebuffer(Fp.READ_FRAMEBUFFER,null),Ld.bindFramebuffer(Fp.DRAW_FRAMEBUFFER,null)}else if(0!==Yt||ae.isRenderTargetTexture||zd.has(ae)){const nt=zd.get(ae),ut=zd.get(ue);Ld.bindFramebuffer(Fp.READ_FRAMEBUFFER,Yp),Ld.bindFramebuffer(Fp.DRAW_FRAMEBUFFER,Qp);for(let ae=0;ae<lu;ae++)od?Fp.framebufferTextureLayer(Fp.READ_FRAMEBUFFER,Fp.COLOR_ATTACHMENT0,nt.__webglTexture,Yt,vu+ae):Fp.framebufferTexture2D(Fp.READ_FRAMEBUFFER,Fp.COLOR_ATTACHMENT0,Fp.TEXTURE_2D,nt.__webglTexture,Yt),ld?Fp.framebufferTextureLayer(Fp.DRAW_FRAMEBUFFER,Fp.COLOR_ATTACHMENT0,ut.__webglTexture,Xt,qu+ae):Fp.framebufferTexture2D(Fp.DRAW_FRAMEBUFFER,Fp.COLOR_ATTACHMENT0,Fp.TEXTURE_2D,ut.__webglTexture,Xt),0!==Yt?Fp.blitFramebuffer(uu,_u,ys,Ec,wu,Hu,ys,Ec,Fp.COLOR_BUFFER_BIT,Fp.NEAREST):ld?Fp.copyTexSubImage3D(td,Xt,wu,Hu,qu+ae,uu,_u,ys,Ec):Fp.copyTexSubImage2D(td,Xt,wu,Hu,uu,_u,ys,Ec);Ld.bindFramebuffer(Fp.READ_FRAMEBUFFER,null),Ld.bindFramebuffer(Fp.DRAW_FRAMEBUFFER,null)}else ld?ae.isDataTexture||ae.isData3DTexture?Fp.texSubImage3D(td,Xt,wu,Hu,qu,ys,Ec,lu,_h,ed,Ju.data):ue.isCompressedArrayTexture?Fp.compressedTexSubImage3D(td,Xt,wu,Hu,qu,ys,Ec,lu,_h,Ju.data):Fp.texSubImage3D(td,Xt,wu,Hu,qu,ys,Ec,lu,_h,ed,Ju):ae.isDataTexture?Fp.texSubImage2D(Fp.TEXTURE_2D,Xt,wu,Hu,ys,Ec,_h,ed,Ju.data):ae.isCompressedTexture?Fp.compressedTexSubImage2D(Fp.TEXTURE_2D,Xt,wu,Hu,Ju.width,Ju.height,_h,Ju.data):Fp.texSubImage2D(Fp.TEXTURE_2D,Xt,wu,Hu,ys,Ec,_h,ed,Ju);Fp.pixelStorei(Fp.UNPACK_ROW_LENGTH,id),Fp.pixelStorei(Fp.UNPACK_IMAGE_HEIGHT,nd),Fp.pixelStorei(Fp.UNPACK_SKIP_PIXELS,rd),Fp.pixelStorei(Fp.UNPACK_SKIP_ROWS,ad),Fp.pixelStorei(Fp.UNPACK_SKIP_IMAGES,sd),0===Xt&&ue.generateMipmaps&&Fp.generateMipmap(td),Ld.unbindTexture()},this.copyTextureToTexture3D=function(ae,ue,nt,qt,Yt){return void 0===nt&&(nt=null),void 0===qt&&(qt=null),void 0===Yt&&(Yt=0),(0,ut.mcG)('WebGLRenderer: copyTextureToTexture3D function has been deprecated. Use "copyTextureToTexture" instead.'),this.copyTextureToTexture(ae,ue,nt,qt,Yt)},this.initRenderTarget=function(ae){void 0===zd.get(ae).__webglFramebuffer&&Nd.setupRenderTarget(ae)},this.initTexture=function(ae){ae.isCubeTexture?Nd.setTextureCube(ae,0):ae.isData3DTexture?Nd.setTexture3D(ae,0):ae.isDataArrayTexture||ae.isCompressedArrayTexture?Nd.setTexture2DArray(ae,0):Nd.setTexture2D(ae,0),Ld.unbindTexture()},this.resetState=function(){rd=0,ad=0,sd=null,Ld.reset(),Jd.reset()},"undefined"!==typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}get coordinateSystem(){return ut.TdN}get outputColorSpace(){return this._outputColorSpace}set outputColorSpace(ae){this._outputColorSpace=ae;const ue=this.getContext();ue.drawingBufferColorSpace=ut.ppV._getDrawingBufferColorSpace(ae),ue.unpackColorSpace=ut.ppV._getUnpackColorSpace()}}},8330:ae=>{"use strict";ae.exports=JSON.parse('{"rE":"4.2.0","Jk":{"O":"https://gitlab.com/panoramax/clients/web-viewer"}}')},4149:ae=>{"use strict";ae.exports=JSON.parse('{"maplibre":{"GeolocateControl.LocationNotAvailable":"Placering ikke tilg\xe6ngelig","GeolocateControl.FindMyLocation":"Find min placering"},"pnx":{"minimize":"Skjul dette modul, du kan vise det igen ved hj\xe6lp af knappen i nederste venstre hj\xf8rne","share_embed_docs":"L\xe6s mere om indlejringskonfiguration","zoom":"Zoom","zoomOut":"Zoom ud","zoomIn":"Zoom ind","moveUp":"Ryk opad","moveDown":"Ryk nedad","moveLeft":"Ryk til venstre","moveRight":"Ryk til h\xf8jre","moveMiddle":"Centreret visning","expand":"Udvid","expand_info":"F\xe5 modulet til at blive vist p\xe5 hele siden","show_psv":"Vis billedfremviseren","show_map":"Vis kortet","options":"Valgmuligheder","filters":"Filtre","layers":"Lag","search":"S\xf8g","search_empty":"Ingen resultater fundet","search_user":"S\xf8g efter et brugernavn\u2026","share":"Del","share_links":"Links","share_page":"Link til dette billede","share_image":"HD-billede","share_rss":"RSS-feed","share_rss_title":"RSS-feed med nye sekvenser i det aktuelt synlige kortomr\xe5de","share_embed":"Indlejr p\xe5 din hjemmeside","share_print":"Udskriv","copy":"Kopi\xe9r","copied":"Kopieret","error_retry":"Pr\xf8v igen senere","sequence_next":"N\xe6ste billede i sekvensen","sequence_play":"Afspil denne sekvens","sequence_more":"Flere afspilningsmuligheder","sequence_speed":"Afspillerens hastighed","legend_license":"Licens: {l}","legend_title":"Vis detaljer om billedet","error_click":"Forts\xe6t","error":"Vi har et problem\u2026","search_address":"S\xf8g efter en adresse, by\u2026","sequence_pause":"S\xe6t sekvensen p\xe5 pause","sequence_prev":"Forrige billede i sekvensen","loading_labels_serious":["\ud83d\uddfa\ufe0f Indl\xe6ser kortdata","\ud83d\udda5\ufe0f Anmoder API","\ud83d\uddbc\ufe0f Indl\xe6ser thumbnails","\ud83d\udd0d Analyserer EXIF-metadata","\ud83c\udfd8\ufe0f 3D-rendering","\ud83d\udcf7 Initialiserer 360\xb0-billeder","\ud83d\udfe0 Farveafstemning","\ud83d\udcaf Beregning af kvalitetsscore \xa9","\ud83d\udce1 Downloader opdateringer","\ud83c\udf0d Henter kortfliser","\ud83d\udcf8 Behandler skygger"],"edit_osm":"Rediger OSM","josm_live":"Aktiv\xe9r automatisk JOSM-synkronisering ved indl\xe6sning af billeder","loading_labels_fun":["\ud83e\udd8c Registrering af skilte om hjortekrydsning","\ud83d\ude98 S\xf8ger Panoramax Car \xa9","\u2615 Injicerer koffein","\ud83d\ude00 Smil, du er blevet kortlagt!","\ud83d\udc08 Deler kattebilleder","\ud83d\ude34 Reducerer overspringshandlinger","\ud83e\uded6 Brygger te","\ud83d\udc27 \xc5bner kildekode","\ud83d\ude87 Indekser undergrundsstationer","\ud83e\uddf9 Metadata-oprydning","\ud83d\ude92 Sender billeder af brandstation","\ud83d\udeb2 Opdatering af Greenways","\ud83d\ude89 Gennemgang af perron p\xe5 station","\ud83d\udef0\ufe0f S\xf8ger efter satellitter","\ud83d\udc65 Skriver personaer","\ud83d\udc1f Finder fish and chip butik","\ud83e\uddd1\u200d\ud83d\udcbb Gr\xe6nseflade til fejlfinding","\ud83d\udcc8 Inkrementelle statistikker","\ud83e\udd16 L\xe6rer semantik","\ud83c\udfa8 Redesign af gr\xe6nseflade","\ud83d\udcc5 Planl\xe6gning af foto-kortl\xe6gningsfester","\ud83e\uddc0 Modning af cheddars","\ud83c\udf04 Beregning af Cornwalls solskin","\ud83c\udf0a M\xe5ling af h\xf8jvande"],"error_psv":"Photo Sphere Viewer indl\xe6ses ikke korrekt","error_nopic":"Intet billede tilg\xe6ngeligt p\xe5 den givne position","error_api":"Billedserveren er ikke tilg\xe6ngelig","error_webgl":"WebGL underst\xf8ttes ikke af din browser","filter_date":"Dato","filter_date_1month":"1 m\xe5ned","filter_date_1year":"1 \xe5r","filter_user":"Bruger","filter_user_mypics":"Mine billeder","filter_picture":"Billedtype","filter_zoom_in":"Zoom ind p\xe5 kortet for at se dette filter","picture_flat":"Klassisk","picture_360":"360\xb0","filter_qualityscore_help":"Klik for at aktivere eller deaktivere","map_background":"Kortbaggrund","map_background_aerial":"Luftfoto","map_background_streets":"Gader","map_theme":"Korttema","error_pic":"Det \xf8nskede billede blev ikke fundet","error_api_compatibility":"Billedserveren er ikke kompatibel med denne version af fremviseren","filter_qualityscore":"Kvalitetsscore","error_josm":"JOSM svarer ikke, k\xf8rer den, og er fjernstyring aktiveret?","metadata_general_seqid_link":"G\xe5 til JSON-beskrivelse af sekvensen","map_theme_default":"Klassisk","map_theme_age_1":"> 2 \xe5r","map_theme_age_2":"< 2 \xe5r","map_theme_age_3":"< 1 \xe5r","map_theme_age_4":"< 1 m\xe5ned","map_theme_type":"Kameratype","map_theme_score":"Kvalitetsscore","contrast":"Aktiv\xe9r h\xf8jere billedkontrast","metadata_general_picid":"Billede","metadata_general_seqid":"Sekvens","metadata_general_picid_link":"G\xe5 til JSON-beskrivelse af billedet","metadata_general_author":"Forfatter","metadata_general_license":"Licens","metadata_general_license_link":"Se den fulde licensbeskrivelse","metadata_general_date":"Optagelsesdato","metadata_camera":"Kamera","metadata_camera_make":"Fabrikat","metadata_camera_model":"Model","metadata_camera_type":"Type","metadata_camera_resolution":"Opl\xf8sning","metadata_camera_focal_length":"Br\xe6ndvidde","metadata_location_latitude":"Breddegrad","metadata_location_orientation":"Retning","metadata_location_precision":"Pr\xe6cision i positionering","metadata_quality":"Kvalitet","metadata_quality_score":"Global score","metadata_quality_gps_score":"Positioneringsscore","metadata_quality_help":"F\xe5 mere at vide om kvalitetsscore","map_theme_age":"Optagelsesdato","metadata_location":"Position","metadata":"Metadata for billede","metadata_location_longitude":"L\xe6ngdegrad","metadata_quality_resolution_score":"Opl\xf8sningsscore","metadata_quality_missing":"ingen v\xe6rdi indstillet i billedet","metadata_exif":"EXIF","metadata_exif_name":"Tag","metadata_exif_value":"V\xe6rdi","report":"Indberet","report_auth":"Denne indberetning vil blive sendt via din konto \\"{a}\\"","report_nature_label":"Problemets karakter","report_nature":{"":"V\xe6lg problemets art\u2026","blur_missing":"En persons ansigt eller bils nummerplade er synlig","blur_excess":"Et objekt, der ikke har brug for sl\xf8ring, sl\xf8res","inappropriate":"Billedet er upassende (ikke relevant, n\xf8genhed\u2026)","privacy":"En privat sti eller ejendom er synlig","picture_low_quality":"Billedet er af meget d\xe5rlig kvalitet","mislocated":"Billedet er d\xe5rligt placeret p\xe5 kortet","copyright":"Billedet kr\xe6nker ophavsretten","other":"Enhver anden form for problem"},"report_whole_sequence":"Det g\xe6lder hele sekvensen","report_details":"Yderligere detaljer","report_details_placeholder":"Hvis du vil, kan du tilf\xf8je detaljer om problemet, og hvad det drejer sig om","report_email":"Din e-mail","report_email_placeholder":"Valgfri","report_submit":"Indsend","report_wait":"Sender indberetning \u2026","report_success":"Indberetningen er blevet sendt. Den vil blive gennemg\xe5et s\xe5 hurtigt som muligt.","report_failure":"Der opstod en fejl under oprettelse af indberetning: {e}. Pr\xf8v venligst igen senere.","qualityscore_title":"Om kvalitetsscoren","qualityscore_doc_2":"Bed\xf8mmelsen vises for brugerne som en A/B/C/D/E-score (A er den bedste, E den d\xe5rligste) og vises grafisk via denne skala:","qualityscore_doc_3":"Den beregnes ud fra GPS-pr\xe6cision og billedopl\xf8sning. Et professionelt system vil have en A-rating, et 360\xb0 actionkamera vil have en B-rating, og en smartphone vil have en C/D/E-rating.","qualityscore_doc_link":"Yderligere oplysninger om kvalitetsscoren","qualityscore_doc_1":"Panoramax tilbyder en kvalitetsscore for hvert billede. Det giver mulighed for nem kortfiltrering og overskuelig visning af tilg\xe6ngelige billeder af h\xf8j kvalitet.","minimize_short":"Skjul","id":"iD","josm":"JOSM","metadata_general_instance":"Oprindelse instans","contribute_id":"Bidrag til OpenStreetMap med iD-editor","geo_uri":"Ekstern app","picture_flat_long":"Klassisk billede","picture_360_long":"Panoramabillede","metadata_summary":"Opsummering","metadata_general_copy_id":"Kopi-ID","metadata_general_copy_picid":"Kopi billed-ID","filter_date_6months":"6 m\xe5neder","picture_all":"Alle","panoramax":"Panoramax","semantics_send_ok":"Dine redigeringer blev indsendt"},"psv":{"loadError":"Panoramaet kan ikke indl\xe6ses","twoFingers":"Brug to fingre til at navigere","ctrlZoom":"Brug ctrl + scroll til at zoome ind p\xe5 billedet"},"map":{"loading":"Indl\xe6ser\u2026","thumbnail":"Miniature af billedet, der holdes","not_public":"Ikke offentligt synlig","slow_loading":"Kortet indl\xe6ses langsomt og kan virke defekt","map_data":"Kortdata: {m}","more_panoramax":"F\xe5 mere at vide om Panoramax"}}')},369:ae=>{"use strict";ae.exports=JSON.parse('{"pnx":{"options":"Optionen","filters":"Filter","search":"Suche","layers":"Ebenen","share_links":"Links","share_page":"Link zu diesem Bild","loading_labels_fun":["\ud83e\udd8c Erkennung von \\"Reh kreuzt\\"-Schildern","\ud83d\ude98 Suche Panoramax-Auto \xa9","\u2615 Koffeininjektion","\ud83d\ude00 L\xe4chle, Du wirst kartografiert!","\ud83d\udc08 Katzenfotos teilen","\ud83d\ude34 Vermeide Prokrastination","\ud83c\udf7a\ufe0f Bier brauen","\ud83d\udc27 Quellcode \xf6ffnen","\ud83d\udee3\ufe0f Indizierung der Autobahnen","\ud83e\uddf9 Metadaten aufr\xe4umen","\ud83d\ude92 Sende Fotos von Feuerwachen","\ud83d\udeb2 Radwege aktualisieren","\ud83d\ude89 Bahnsteig ablaufen","\ud83d\udef0\ufe0f Suche Satelliten","\ud83d\udc65 Personas anlegen","\ud83c\udf2d\ufe0f Orte n\xe4chsten Currywurst-Stand","\ud83e\uddd1\u200d\ud83d\udcbb Fehlerbehebung wird ausgef\xfchrt","\ud83d\udcc8 Statistiken anpassen","\ud83e\udd16 Suche den Sinn des Lebens","\ud83c\udfa8 Benutzeroberfl\xe4che neu gestalten","\ud83d\udcc5 Fotomapping-Partys planen","\ud83e\uddc0 Dem Emmentaler beim Reifen zuschauen","\ud83c\udf04 Sonnenstand berechnen","\ud83c\udf0a Messung der Gezeiten"],"search_empty":"Keine Ergebnisse gefunden","share":"Teilen","metadata_general_picid":"Bild","zoom":"Zoom","zoomOut":"Herauszoomen","zoomIn":"Hereinzoomen","moveUp":"Nach oben","moveDown":"Nach unten","moveRight":"Nach rechts","moveMiddle":"Sicht zentrieren","map_theme_age":"Aufnahmedatum","expand":"Ausklappen","expand_info":"Widget im Vollbild anzeigen","show_psv":"Bildbetrachter anzeigen","show_map":"Karte anzeigen","search_user":"Suche einen Nutzernamen\u2026","filter_zoom_in":"Vergr\xf6\xdfere die Karte, um diesen Filter zu anzuwenden","picture_flat":"Klassisch","picture_360":"360\xb0","filter_camera_model":"Nach Kameramodell","map_background":"Kartenhintergrund","map_background_aerial":"Satelliten","map_background_streets":"Stra\xdfen","map_theme":"Karten-Art","metadata_exif_name":"Tag","metadata_exif_value":"Wert","map_theme_age_2":"< 2 Jahre","map_theme_age_3":"< 1 Jahr","map_theme_type":"Kameratyp","contrast":"H\xf6heren Bildkontrast aktivieren","metadata":"Bildmetadaten","metadata_general_seqid":"Sequenz","metadata_general_picid_link":"Zur JSON-Beschreibung des Bildes wechseln","loading_labels_serious":["\ud83d\uddfa\ufe0f Lade Kartendaten","\ud83d\udda5\ufe0f API anfragen","\ud83d\uddbc\ufe0f Vorschaubilder laden","\ud83d\udd0d EXIF-Metadaten analysieren","\ud83c\udfd8\ufe0f 3D-Rendering","\ud83d\udcf7 360\xb0 Fotos initialisieren","\ud83d\udfe0 Farben ausgleichen","\ud83d\udcaf Berechne Quality Score \xa9","\ud83d\udce1 Herunterladen von Updates","\ud83c\udf0d Lade Kartenausschnitte","\ud83d\udcf8 Bearbeitung der Schatten"],"search_address":"Suche eine Adresse, Stadt, \u2026","share_image":"HD-Bild","share_rss":"RSS-Feed","share_embed":"Auf Webseite einbetten","share_print":"Drucken","copy":"Kopieren","copied":"Kopiert","error":"Ein Fehler ist aufgetreten\u2026","sequence_next":"N\xe4chstes Foto in der Sequenz","sequence_play":"Sequenz abspielen","sequence_pause":"Sequenz pausieren","sequence_prev":"Vorheriges Foto in der Sequenz","sequence_more":"Mehr Abspieloptionen","sequence_speed":"Abspielgeschwindigkeit","legend_license":"Lizenz: {l}","edit_osm":"OSM editieren","id":"iD","josm":"JOSM","josm_live":"Einschalten der automatischen JOSM-Synchronisierung beim Laden eines Bildes","error_psv":"Betrachter f\xfcr die Photospheres wurde nicht richtig geladen","error_pic":"Angefragtes Foto wurde nicht gefunden","error_nopic":"Kein Foto an dieser Position verf\xfcgbar","error_api":"Foto-Server ist nicht erreichbar","error_josm":"JOSM reagiert nicht. Ist das Programm ge\xf6ffnet und die Remote-Verbindung aktiv?","error_api_compatibility":"Der Foto-Server ist nicht mit dieser Version des Betrachters kompatibel","filter_date":"Datum","filter_user":"Benutzer","filter_picture":"Art des Fotos","map_theme_default":"Klassisch","map_theme_age_1":"> 2 Jahre","metadata_general_seqid_link":"Zur JSON-Beschreibung der Sequenz wechseln","metadata_general_author":"Autor","metadata_general_license":"Lizenz","metadata_general_date":"Aufnahmedatum","metadata_camera":"Kamera","metadata_camera_make":"Hersteller","metadata_camera_model":"Modell","metadata_camera_type":"Typ","metadata_camera_focal_length":"Brennweite","metadata_location":"Position","metadata_location_longitude":"L\xe4ngengrad","metadata_location_latitude":"Breitengrad","metadata_location_orientation":"Richtung","metadata_location_precision":"Genauigkeit der Positionierung","metadata_exif":"EXIF","minimize":"Dieses Widget verbergen. Du kannst es \xfcber die Schaltfl\xe4che in der linken, unteren Ecke wieder einblenden","map_theme_age_4":"< 1 Monat","error_subtitle":"Bitte versuchen sie es sp\xe4ter erneut, oder schauen sie in die Web-Browser-Konsole f\xfcr mehr Details.","moveLeft":"Nach links","share_rss_title":"RSS-Feed neuer Sequenzen auf dem aktuell sichtbaren Kartenbereich","error_webgl":"WebGL wird von ihrem Browser nicht unterst\xfctzt","metadata_general_license_link":"Vollst\xe4ndige Lizenzbeschreibung anschauen","share_embed_docs":"Mehr \xfcber die Einbettungs-Konfiguration lesen","report_nature":{"":"Art des Problems ausw\xe4hlen\u2026","inappropriate":"Das Bild ist unangemessen (irrelevant, Nacktheit, ...)","picture_low_quality":"Das Bild hat eine sehr schlechte Qualit\xe4t","blur_missing":"Das Gesicht einer Person oder ein KFZ-Kennzeichen ist sichtbar","blur_excess":"Ein Objekt wurde unkenntlich gemacht, obwohl es nicht erforderlich war","privacy":"Ein privater Pfad oder ein privates Grundst\xfcck ist sichtbar","mislocated":"Das Bild ist falsch auf der Karte eingezeichnet","copyright":"Das Bild verst\xf6\xdft gegen das Urheberrecht","other":"Eine andere Art von Problem"},"report_details_placeholder":"Du kannst optional Details \xfcber das Problem hinzuf\xfcgen","report_auth":"Diese Meldung wird \xfcber dein Konto \\"{a}\\" gesendet","report_nature_label":"Ursache des Problems","report_whole_sequence":"Dies betrifft die gesamte Sequenz","report_details":"Weitere Details","report_email":"Deine Email-Adresse","report_email_placeholder":"Optional","report_submit":"Absenden","report_success":"Deine Meldung wurde erfolgreich gesendet. Sie wird so schnell wie m\xf6glich \xfcberpr\xfcft.","report_failure":"Bei der Erstellung der Meldung ist ein Fehler aufgetreten: {e}. Bitte versuche es sp\xe4ter erneut.","report":"Melden","legend_title":"Zeige Bilderdetails","report_wait":"Meldung wird gesendet\u2026","error_click":"Weiter","error_retry":"Bitte sp\xe4ter erneut versuchen","metadata_camera_resolution":"Aufl\xf6sung","filter_user_mypics":"Meine Fotos","metadata_quality_missing":"kein Wert im Foto gesetzt","filter_date_1month":"1 Monat","filter_date_1year":"1 Jahr","filter_qualityscore":"Qualit\xe4tswert","filter_qualityscore_help":"Zum Aktivieren oder Deaktivieren klicken","map_theme_score":"Qualit\xe4tswert","metadata_quality":"Qualit\xe4t","metadata_quality_help":"Erfahre mehr \xfcber den Qualit\xe4tswert","metadata_quality_resolution_score":"Bewertung der Aufl\xf6sung","metadata_quality_gps_score":"Bewertung der Position","metadata_quality_score":"Gesamtwertung","qualityscore_title":"\xdcber den Qualit\xe4tswert","qualityscore_doc_link":"Weitere Informationen zur Berechnung des Qualit\xe4tsfaktors findest du in unserer Dokumentation","qualityscore_doc_1":"Panoramax ordnet jedem Bild einen Qualit\xe4tswert zu. Dies erm\xf6glicht eine einfache Filterung auf der Karte und eine schnelle Anzeige von qualitativ hochwertigen Bildern.","qualityscore_doc_2":"Der Qualit\xe4tswert wird den Benutzern als A/B/C/D/E-Bewertung angezeigt (A ist am Besten, E am Schlechtesten) und anhand dieser Skala veranschaulicht:","qualityscore_doc_3":"Die Berechnung erfolgt auf der Grundlage der GPS-Genauigkeit und der Bildaufl\xf6sung. Ein professionelles System wird mit A bewertet, eine 360-Grad-Action-Kamera mit B, und ein Smartphone mit C/D/E.","minimize_short":"Verbergen","semantics_features_none":"Bislang wurde kein Feature in diesem Bild markiert.","semantics_features_default_title":"Tag {nb}","semantics_features_subtitle":"{nb} assoziierte Eigenschaften","semantics_show_all_tags":"Alle Tags anzeigen","semantics_title":"Tags","semantics_tags":"{nb] Tags","semantics_features":"Features im Bild","semantics_hide_all_tags":"Alle Tags verbergen","semantics_annotation_tooltip":"Klicke, um Details zu sehen","semantics_key":"Schl\xfcssel","semantics_value":"Wert","semantics_key_doc":"Mehr \xfcber diesen Schl\xfcssel erfahren","semantics_value_doc":"Mehr \xfcber dieses Tag erfahren","semantics_tags_picture":"Foto-Schlagworte","semantics_tags_picture_none":"Bislang wurden keine Schlagworte f\xfcr dieses Foto gesetzt.","semantics_show_annotations":"Features im Bild anzeigen","semantics_hide_annotations":"Features im Bild verbergen","semantics_wikidata_properties":{"P31":"Instanz von","P279":"Unterklasse von","P361":"Teil von"},"metadata_exif_doc":"Dokumentation der EXIF-Tags","metadata_exif_doc_title":"Wechsle zur Exiv2-Dokumentation f\xfcr eine vollst\xe4ndige Beschreibung von EXIF- und XMP-Tags","metadata_location_coordinates":"Koordinaten (L\xe4ngengrad, Breitengrad)","metadata_location_copy":"Kopiere {v}","metadata_location_copy_more":"Mehr Optionen zum Kopieren der Koordinaten","whats_panoramax":"Panoramax ist eine Geo-Commons f\xfcr Gebietsfotos.","picture_360_long":"Panoramafoto","metadata_summary":"Zusammenfassung","filter_date_6months":"6 Monate","picture_all":"Alle","picture_flat_long":"Klassisches Foto","metadata_general_instance":"Quell-Instanz","geo_uri":"Externe App","contribute_id":"Zu OpenStreetMap mit dem iD Editor beitragen","metadata_general_copy_id":"ID kopieren","metadata_general_copy_picid":"Kopiere Foto-ID","semantics_qualifiers":"Qualifikatoren","panoramax":"Panoramax","semantics_zero_annotations":"In diesem Bild wurden keine Features markiert","semantics_hashtags":"Bild-Hashtags","semantics_editor_error":"Die Syntax ist ung\xfcltig. Deine Tags sollten so aussehen:\\nSchl\xfcssel=Wert\\nPr\xe4fix|Schl\xfcssel=Wert\\nPr\xe4fix|Schl\xfcssel[Qualif_Schl\xfcssel=Qualif_Wert]=Wert\\n\\nDie maximale L\xe4nge eines Schl\xfcssels betr\xe4gt 256 Zeichen, die eines Wertes betr\xe4gt 2048 Zeichen.","semantics_cantsave_invalid":"\xc4nderungen k\xf6nnen nicht angewendet werden, Eingabe ist ung\xfcltig","semantics_editor_example":"Schl\xfcssel=Wert\\nPr\xe4fix|Schl\xfcssel=Wert","semantics_edit":"Attribute bearbeiten","semantics_save":"\xc4nderungen speichern","semantics_undo":"Bearbeitung abbrechen","semantics_send_fail":"\xc4nderungen k\xf6nnen nicht angewendet werden. Bitte versuche es sp\xe4ter noch einmal","semantics_send_ok":"\xc4nderungen wurden erfolgreich hochgeladen","semantics_save_drawn_annotation":"Position speichern","semantics_undo_drawn_annotation":"Abbrechen","semantics_save_drawn_annotation_incomplete":"Sie m\xfcssen vor der Validierung ein Rechteck dass in das Foto passt zeichnen","semantics_delete_annotation":"Dieses Feature l\xf6schen","semantics_delete_annotation_confirm":"M\xf6chtest du dieses Tag wirklich l\xf6schen?","semantics_add_annotation":"Neues Tag hinzuf\xfcgen","semantics_draw_annotation":"Du kannst ein Objekt im Bild markieren, um es hinzuzuf\xfcgen (optional).","semantics_login_needed":"Um Tags oder Features in Fotos zu bearbeiten, ist es erforderlich, in Panoramax-Instanz {n} angemeldet zu sein. M\xf6chtest du dich anmelden?","semantics_doc_title":"\xdcber Tags","semantics_erase_annotation":"Markiertes Feature entfernen","semantics_doc_info1":"Stelle mittels Tags mehr Kontext zu einem Bild bereit. Mit dem Tag transport=car kannst du markieren, dass es mit Hilfe eines Autos aufgenommen wurde.","semantics_doc":"Hilfe","semantics_doc_info3":"Einige Objekte werden automatisch mittels KI erkannt: Eine gute Erkennungsrate kann nicht garantiert werden.","semantics_doc_link":"Erfahre mehr \xfcber Tags","semantics_doc_info2":"Du kannst auch Objekte im Bild markieren: Verkehrszeichen, Stadtmobiliar\u2026 Nutze bestehende Tags, um zu markieren, was du siehst. Du kannst au\xdferdem, falls erforderlich, neue Tags erstellen.","semantics_sequence_tags":"Sequenz-Tag","semantics_picture_tags":"Bild-Tag","semantics_annotation_tags":"Objekt-Tag","filter_gps_precision":"Standortgenauigkeit","filter_gps_precision_lessthan":"Weniger als {n} Meter","filter_gps_precision_between":"Zwischen {n1} und {n2} Metern","filter_gps_precision_morethan":"Mehr als {n} Meter","map_theme_gps":"Standortgenauigkeit"},"psv":{"twoFingers":"Nutze zwei Finger zum Navigieren","ctrlZoom":"Nutze Strg + Scrollen, um das Bild zu vergr\xf6\xdfern","loadError":"Das Panorama konnte nicht geladen werden"},"map":{"thumbnail":"Vorschau des markierten Fotos","not_public":"Nicht \xf6ffentlich sichtbar","loading":"Laden\u2026","slow_loading":"Die Karte wird nur langsam geladen und k\xf6nnte fehlerhaft erscheinen","map_data":"Kartendaten: {m}","more_panoramax":"Mehr \xfcber Panoramax erfahren"},"maplibre":{"GeolocateControl.FindMyLocation":"Meinen Standort finden","GeolocateControl.LocationNotAvailable":"Standort nicht verf\xfcgbar"}}')},389:ae=>{"use strict";ae.exports=JSON.parse('{"psv":{"twoFingers":"Use two fingers to navigate","ctrlZoom":"Use ctrl + scroll to zoom the image","loadError":"The panorama can\'t be loaded"},"maplibre":{"GeolocateControl.FindMyLocation":"Find my location","GeolocateControl.LocationNotAvailable":"Location not available"},"pnx":{"zoom":"Zoom","zoomOut":"Zoom out","zoomIn":"Zoom in","moveUp":"Move up","moveDown":"Move down","moveLeft":"Move left","moveRight":"Move right","moveMiddle":"Center view","expand":"Expand","expand_info":"Make the widget appear in full page","show_psv":"Show the picture viewer","show_map":"Show the map","minimize":"Hide this widget, you can show it again using button in bottom left corner","minimize_short":"Hide","options":"Options","filters":"Filters","layers":"Layers","search":"Search","search_empty":"No results found","search_address":"Search an address, city\u2026","search_user":"Search a username\u2026","share":"Share","share_links":"Links","share_page":"Link to this picture","share_image":"HD Image","share_rss":"RSS feed","share_rss_title":"RSS feed of new sequences in the currently visible map area","share_embed":"Embed on your website","share_embed_docs":"Read more about embed configuration","share_print":"Print","panoramax":"Panoramax","whats_panoramax":"Panoramax is the geo-commons for territories\' pictures.","copy":"Copy","copied":"Copied","error":"We have a problem\u2026","error_click":"Continue","error_retry":"Please retry later","sequence_next":"Next picture in sequence","sequence_play":"Play along this sequence","sequence_pause":"Pause sequence","sequence_prev":"Previous picture in sequence","sequence_more":"More play options","sequence_speed":"Player speed","legend_license":"License: {l}","legend_title":"Show details of picture","id":"iD","contribute_id":"Contribute to OpenStreetMap with iD editor","geo_uri":"External app","josm":"JOSM","josm_live":"Enable JOSM automatic sync on picture loading","loading_labels_serious":["\ud83d\uddfa\ufe0f Loading map data","\ud83d\udda5\ufe0f Querying API","\ud83d\uddbc\ufe0f Loading thumbnails","\ud83d\udd0d Analyzing EXIF metadata","\ud83c\udfd8\ufe0f 3D rendering","\ud83d\udcf7 Initializing 360\xb0 pictures","\ud83d\udfe0 Colour balancing","\ud83d\udcaf Computing Quality Score \xa9","\ud83d\udce1 Downloading updates","\ud83c\udf0d Fetching map tiles","\ud83d\udcf8 Processing shadows"],"loading_labels_fun":["\ud83e\udd8c Detecting deer crossing signs","\ud83d\ude98 Searching Panoramax Car \xa9","\u2615 Injecting caffeine","\ud83d\ude00 Smile, you\'re mapped!","\ud83d\udc08 Sharing cat pictures","\ud83d\ude34 Reducing procrastination","\ud83e\uded6 Brewing tea","\ud83d\udc27 Opening source code","\ud83d\ude87 Indexing Underground stations","\ud83e\uddf9 Metadata cleanup","\ud83d\ude92 Sending fire station photos","\ud83d\udeb2 Greenways update","\ud83d\ude89 Station platform walkthrough","\ud83d\udef0\ufe0f Searching satellites","\ud83d\udc65 Writing personas","\ud83d\udc1f Locating chip shops","\ud83e\uddd1\u200d\ud83d\udcbb Debugging interface","\ud83d\udcc8 Incrementing statistics","\ud83e\udd16 Learning semantics","\ud83c\udfa8 Interface redesign","\ud83d\udcc5 Planning photo-mapping-parties","\ud83e\uddc0 Maturing cheddars","\ud83c\udf04 Calculating Cornish sunshine","\ud83c\udf0a Measuring the high tides"],"error_psv":"Photo Sphere Viewer is not loading properly","error_pic":"Requested picture wasn\'t found","error_nopic":"No picture available at given position","error_api":"The pictures server is not available","error_webgl":"WebGL is not supported by your browser","error_josm":"JOSM doesn\'t respond, is it running and is remote enabled?","error_api_compatibility":"The pictures server is not compatible with this viewer version","filter_date":"Date","filter_date_1month":"1 month","filter_date_6months":"6 months","filter_date_1year":"1 year","filter_user":"User","filter_user_mypics":"My pictures","filter_picture":"Picture type","filter_zoom_in":"Zoom-in the map to see this filter","picture_all":"All","picture_flat":"Classic","picture_360":"360\xb0","picture_flat_long":"Classic picture","picture_360_long":"Panoramic picture","filter_qualityscore":"Quality score","filter_qualityscore_help":"Click to enable or disable","qualityscore_title":"About the quality score","qualityscore_doc_1":"Panoramax offers a Quality Score for each picture. It allows easy map filtering and comprehensive display of high-quality pictures availability.","qualityscore_doc_2":"The grade is shown to users as a A/B/C/D/E score (A is the best, E the worst), and shown graphically through this scale:","qualityscore_doc_3":"It is computed based on GPS precision and picture resolution. A professional system will have an A-rating, a 360\xb0 action camera will have a B-rating, and a smartphone will be C/D/E-rated.","qualityscore_doc_link":"Know more about the Quality Score","filter_gps_precision":"Location precision","filter_gps_precision_lessthan":"Less than {n} meters","filter_gps_precision_between":"Between {n1} and {n2} meters","filter_gps_precision_morethan":"More than {n} meters","map_background":"Map background","map_background_aerial":"Aerial","map_background_streets":"Streets","map_theme":"Map theme","map_theme_default":"Classic","map_theme_age":"Capture date","map_theme_age_1":"> 2 years","map_theme_age_2":"< 2 years","map_theme_age_3":"< 1 year","map_theme_age_4":"< 1 month","map_theme_type":"Camera type","map_theme_score":"Quality score","map_theme_gps":"Location precision","contrast":"Enable higher image contrast","metadata":"Picture metadata","metadata_summary":"Summary","metadata_general_copy_id":"Copy ID","metadata_general_copy_picid":"Copy picture ID","metadata_general_picid":"Picture","metadata_general_seqid":"Sequence","metadata_general_picid_link":"Go to JSON description of the picture","metadata_general_seqid_link":"Go to JSON description of the sequence","metadata_general_author":"Author","metadata_general_license":"License","metadata_general_license_link":"See the full licence description","metadata_general_date":"Capture date","metadata_general_instance":"Origin instance","metadata_camera":"Camera","metadata_camera_make":"Make","metadata_camera_model":"Model","metadata_camera_type":"Type","metadata_camera_resolution":"Resolution","metadata_camera_focal_length":"Focal length","metadata_location":"Position","metadata_location_coordinates":"Coordinates (longitude, latitude)","metadata_location_orientation":"Direction","metadata_location_precision":"Positioning precision","metadata_location_copy":"Copy {v}","metadata_location_copy_more":"More coordinates copy options","metadata_quality":"Quality","metadata_quality_help":"Know more about Quality Score","metadata_quality_score":"Global score","metadata_quality_gps_score":"Positioning score","metadata_quality_resolution_score":"Resolution score","metadata_quality_missing":"no value set in picture","metadata_exif":"EXIF","metadata_exif_name":"Tag","metadata_exif_value":"Value","metadata_exif_doc":"Docs for EXIF tags","metadata_exif_doc_title":"Go to Exiv2 documentation to have full details on EXIF and XMP tags definitions","semantics_title":"Tags","semantics_tags":"{nb} tags","semantics_features":"Picture features","semantics_features_none":"No feature has been drawn in this picture yet.","semantics_features_default_title":"Tag {nb}","semantics_features_subtitle":"{nb} associated properties","semantics_annotation_tooltip":"Click to see details","semantics_show_all_tags":"Show all tags","semantics_hide_all_tags":"Hide all tags","semantics_key":"Key","semantics_value":"Value","semantics_sequence_tags":"Sequence tag","semantics_picture_tags":"Picture tag","semantics_annotation_tags":"Object tag","semantics_doc":"Help","semantics_doc_title":"About tags","semantics_doc_info1":"Give context around a picture using tags. You can tag it as captured by car with the transport=car tag.","semantics_doc_info2":"You can draw objects in the picture as well: road signs, urban equipments\u2026 Mark what you see using existing tags. You can create your own ones as well if necessary.","semantics_doc_info3":"Some objects are automatically detected with AI: quality is not guaranteed.","semantics_doc_link":"Know more about tags","semantics_key_doc":"Know more about this key","semantics_value_doc":"Know more about this tag","semantics_qualifiers":"Qualifiers","semantics_show_annotations":"Display picture features","semantics_hide_annotations":"Hide picture features","semantics_zero_annotations":"No features drawn on this picture","semantics_add_annotation":"Add a new tag","semantics_draw_annotation":"You can draw the object you want to add over the picture (Optional).","semantics_erase_annotation":"Erase drawn feature","semantics_delete_annotation":"Delete this feature","semantics_delete_annotation_confirm":"Do you really want to delete this tag ?","semantics_wikidata_properties":{"P31":"instance of","P279":"subclass of","P361":"part of"},"semantics_editor_error":"The syntax is invalid. Your tags may look like:\\nkey=value\\nprefix|key=value\\nprefix|key[qualif_key=qualif_val]=value\\n\\nMax key length is 256 characters, max value length 2048 characters.","semantics_editor_example":"key=value\\nprefix|key=value","semantics_edit":"Edit attributes","semantics_save":"Save your changes","semantics_undo":"Cancel your edits","semantics_send_fail":"Unable to save your changes, please try again later","semantics_login_needed":"In order to edit picture tags or features, you need to log in on Panoramax {n} instance. Do you want to log-in ?","report":"Report","report_auth":"This report will be sent using your account \\"{a}\\"","report_nature_label":"Cause of the issue","report_nature":{"":"Select the nature of issue\u2026","blur_missing":"A person\'s face or car license plate is visible","blur_excess":"An unnecessary blur was applied to an object","inappropriate":"Picture is inappropriate (unrelated, nudity\u2026)","privacy":"A private path or property is visible","picture_low_quality":"Image is low quality","mislocated":"Picture is poorly positioned on map","copyright":"Picture infringes copyright","other":"Any other kind of issue"},"report_whole_sequence":"This concerns the entire sequence","report_details":"Additional details","report_details_placeholder":"Optionally, you can add details about the issue","report_email":"Your email","report_email_placeholder":"Optional","report_submit":"Submit","report_wait":"Sending report\u2026","report_success":"Report was sent successfully. It will be reviewed as soon as possible.","report_failure":"An error occurred when creating report: {e}. Please try again later."},"map":{"loading":"Loading\u2026","thumbnail":"Thumbnail of hovered picture","not_public":"Not publicly visible","slow_loading":"Map is slow to load and could appear broken","map_data":"Map based on {m}","more_panoramax":"Discover more about Panoramax"}}')},9946:ae=>{"use strict";ae.exports=JSON.parse('{"psv":{"twoFingers":"Uzu du fingrojn por navigi","ctrlZoom":"Uzu ctrl + rulumo por zomi la bildon","loadError":"La bildo ne povas esti \u015dar\u011dita"},"pnx":{"zoom":"Zomo","zoomOut":"Malzomo","zoomIn":"Zomi","moveUp":"Movi supren","moveDown":"Movi malsupren","moveLeft":"Movi maldekstren","moveRight":"Movi dekstren","moveMiddle":"Centri vido","expand":"Pligrandigi","expand_info":"Aperigu la fenestra\u0135on en plena pa\u011do","show_psv":"Montri la bildspektilo","show_map":"Montri la mapo","minimize":"Maski la fenestra\u0135o, vu povas montri \u011din denove kun la butono en malsupra maldekstra angulo","sequence_prev":"Anta\u016da foto en la sekvenco","sequence_more":"Pli da ludopcioj","sequence_speed":"Rapideco de legado","sequence_next":"Sekva foto en la sekvenco","sequence_play":"Foliumi \u0109i tiun sinsekvon","sequence_pause":"Pa\u016dzi la sekvenco","copy":"Kopii","copied":"Kopiita","error":"Ni havas problemon\u2026","error_click":"Kontinui","error_retry":"Bonvolu reprovi poste","search_address":"Ser\u0109i adreson, urbon\u2026","filters":"Filtriloj","layers":"Tavoloj","search":"Ser\u0109i","share_embed_docs":"Pli pri enigito sur via retpa\u011daro","search_empty":"Neniu rezulto trovita","search_user":"Ser\u0109i uzantnomon\u2026","share":"Kunhavigi","share_links":"Ligiloj","share_page":"Ligilo de la foto","share_image":"HD bildo","share_rss":"RSS abonfluo","share_rss_title":"RSS abonfluo de la novaj sekvecoj en la nuntempe videbla mapzono","share_embed":"Enigita en via retpa\u011daro","share_print":"Presi","edit_osm":"Modifi OSM","legend_license":"Rajtigilo : {l}","josm_live":"Ebligas a\u016dtomatan JOSM-sinkronigon dum \u015dar\u011do de bildo","loading_labels_serious":["\ud83d\uddfa\ufe0f \u015cargo de la bazmapon","\ud83d\udda5\ufe0f API demandado","\ud83d\uddbc\ufe0f \u015car\u011do de miniaturoj","\ud83d\udd0d Analizo de EXIF-metadatumoj","\ud83c\udfd8\ufe0f 3D-rendumo","\ud83d\udcf7 Inico de 360\xb0-bildoj","\ud83d\udfe0 Kolora ekvilibrigo","\ud83d\udcaf Kalkulo de kvalitpoentaro \xa9","\ud83d\udce1 El\u015dutante \u011disdatoj","\ud83c\udf0d Reakirante mapkaheloj","\ud83d\udcf8 Traktadante ombroj"],"legend_title":"Montri la detaloj de la bildo","error_api":"La bildservilo ne estas disponebla","error_josm":"JOSM ne respondis. \u0108u \u011di funkcias kaj la regilo estas \u015daltita?","error_webgl":"WebGL ne estas subtenata per via retumilo","loading_labels_fun":["\ud83e\udd8c Detekto de cervinaj vojmontriloj","\ud83d\ude98 Ser\u0109o de Panoramax-a\u016dto \xa9","\u2615 Injekto de kafeino","\ud83d\ude00 Ridetu, vi estas mapita!","\ud83d\udc08 Kunhavigo de katbildoj","\ud83d\ude34 Redukto de prokrastado","\ud83d\udcd6 Lernado de Esperanto","\ud83d\udc27 Malfermo de fontkodo","\ud83d\ude87 Indekso de subteraj stacioj","\ud83e\uddf9 Purigo de metadatumoj","\ud83d\ude92 Sendado de fotoj de fajrostacioj","\ud83d\udeb2 \u011cisdatigo de verdaj vojoj","\ud83d\ude89 Promenado tra stacioplatformoj","\ud83d\udef0\ufe0f Ser\u0109o de satelitoj","\ud83d\udc65 Verkado de roluloj","\u2747\ufe0f Lokalizo de la Esperanto-flagoj","\ud83e\uddd1\u200d\ud83d\udcbb Sencimigado de la interfaco","\ud83d\udcc8 Alkrementi de la statistikoj","\ud83e\udd16 Lernadante semantiko","\ud83c\udfa8 Interfaca redezajno","\ud83d\udcc5 Planante fota-mapa-festoj","\ud83e\uddc0 Finmaturigo de la froma\u011doj","\ud83c\udf04 Kalkulante la sunbrilon de la Saharo","\ud83c\udf0a Mezurado de la altaj tajdoj"],"picture_360":"360\xb0","picture_flat":"Klasika","report_nature_label":"Speco de problemo","report_nature":{"":"Elektu la specon de problemo\u2026","blur_missing":"Viza\u011do a\u016d numerplato estas videbla","copyright":"La bildo malobeas kopirajton","blur_excess":"Objekto kiu ne bezonis malklari\u011don estas malklarigita","inappropriate":"La bildo estas neta\u016dga (nevera, nudeco...)","privacy":"Privata vojo a\u016d poseda\u0135o estas videbla","picture_low_quality":"La bildo estas de tre malbona kvalito","mislocated":"La bildo estas malbone poziciigita sur la mapo","other":"\u0108ia alia speco de problemo"},"report":"Raporti","report_auth":"\u0108i tiu raporto estos sendita per via konto \\"{a}\\"","filter_date":"Dato","filter_user_mypics":"Miaj fotoj","options":"Opcioj","error_api_compatibility":"La fotoservilo ne kongruas kun \u0109i tiu spektilo","filter_qualityscore":"Kvalitpoentaro","filter_qualityscore_help":"Alllaku por aktivigi a\u016d mal\u015dalti","map_theme_age":"Dato de fotado","map_theme_age_1":"> 2 jaroj","map_theme_age_2":"< 2 jaroj","map_theme_age_3":"< 1 jaro","map_theme_age_4":"< 1 monato","map_theme_score":"Kvalitpoentaro","metadata":"Metadatenoj de la bildo","map_theme_type":"Fotiltipo","metadata_general_seqid":"Sekvenco","metadata_camera_resolution":"Difino","metadata_quality_resolution_score":"Rezolucia poentaro","error_psv":"Foto-Sfera Spektilo ne \u015dar\u011di\u011das \u011duste","error_pic":"La petita bildo ne estis trovita","error_nopic":"Neniu bildo disponeblas \u0109e la donita pozicio","filter_user":"Uzanto","map_theme_default":"Klasika","filter_date_1month":"1 monato","filter_date_1year":"1 jaro","contrast":"Pliigi bildkontraston","metadata_general_picid":"Foto","filter_picture":"Bilda tipo","filter_zoom_in":"Zomu en la mapo por vidi tiun filtrilon","map_background":"Bazmapo","map_background_aerial":"Aera","map_background_streets":"Stratoj","map_theme":"Mapa etoso","metadata_general_picid_link":"Iru al la JSON-priskribo de la foto","metadata_general_seqid_link":"Iru al la JSON-priskribo de la sekvenco","metadata_general_author":"A\u016dtoro","metadata_general_license":"Rajtigilo","metadata_general_license_link":"Vidi la kompletan rajtigilon en la priskribo","metadata_general_date":"Dato de la fotado","metadata_camera":"Fotilo","metadata_camera_make":"Faristo","metadata_camera_model":"\u015cablono","metadata_camera_type":"Tipo","metadata_camera_focal_length":"Fokuslongo","metadata_location":"Pozicio","metadata_location_longitude":"Longitudo","metadata_location_latitude":"Latitudo","metadata_location_orientation":"Direkto","metadata_location_precision":"Pozicia precizeco","metadata_quality":"Kvalito","metadata_quality_help":"Pli pri la Kvalitapoentaro","metadata_quality_score":"Malloka poentaro","metadata_quality_gps_score":"Pozicia poentaro","metadata_quality_missing":"neniu valoro en la bildo","metadata_exif":"EXIF","metadata_exif_name":"Etikedo","metadata_exif_value":"Valoro","report_whole_sequence":"\u0108i tio koncernas la tutan sekvencon","report_details":"Aliaj detaloj","report_email":"Via retpo\u015dto","report_submit":"Sendi","report_wait":"Sendante raporton\u2026","report_success":"La raporto estis sukcese sendita. \u011ci estos reviziita balda\u016d.","report_details_placeholder":"Opcie, vi povas aldoni detalojn pri la problemo","report_email_placeholder":"Opcie","report_failure":"Eraro okazis dum kreo de la raporto: {e}. Bonvolu provi denove poste.","qualityscore_doc_3":"\u011ci estas kalkulita surbaze de GPS-precizeco kaj bildrezolucio. Profesiaj sistemoj havos A-poentaron, 360\xb0-akcifotilo havos B-poentaron, kaj po\u015dtelefono havos C/D/E-poentaron.","qualityscore_title":"Pri la kvalita poentaro","qualityscore_doc_1":"Panoramax ofertas Kvalitan Poentaron por \u0109iu bildo. \u011ci ebligas facilan mapfiltradon kaj ampleksan vidigon de la havebleco de altkvalitaj bildoj.","qualityscore_doc_link":"Pli da detaloj pri la kalkulo de la Kvalita Poentaro estas disponeblaj en nia dokumentado","minimize_short":"Maski","qualityscore_doc_2":"La poentaro estas montrita al uzantoj kiel litero A/B/C/D/E (A estas la plej bona, E la plej malbona) kaj grafike prezentita per \u0109i tiu skalo:","id":"iD","josm":"JOSM","contribute_id":"Kontribuu al OpenStreetMap kun iD-modifilo","filter_date_6months":"6 monatoj","picture_all":"\u0108iuj","picture_flat_long":"Klasika foto","picture_360_long":"Panorama foto","metadata_summary":"Resumo","metadata_general_copy_id":"Kopii la ID-on","metadata_general_copy_picid":"Kopii la fotan ID-on","metadata_general_instance":"Origina instanco","geo_uri":"Ekseteraj aplika\u0135oj","semantics_title":"Etikedoj","semantics_tags":"{nb} etikedoj","semantics_features":"Detektitaj objektoj","semantics_features_none":"No objekto estis ankora\u016d detektita a\u016d prinotita en \u0109i tiu foto.","semantics_features_default_title":"Objekto #{nb}","metadata_exif_doc":"Dokumentoj por EXIF-etikedoj","metadata_exif_doc_title":"Iru al la dokumentaro de Exiv2 por havi plenajn detalojn pri difinoj de EXIF kaj XMP-etikedoj","metadata_location_coordinates":"Koordinatoj (longitudo, latitudo)","metadata_location_copy":"Kopii {v}","metadata_location_copy_more":"Pli da ebloj por kopii koordinatojn","whats_panoramax":"Panoramax estas la geokomuna\u0135o por teritoriaj fotoj.","semantics_features_subtitle":"{nb} asociitaj atributoj","semantics_tags_picture_none":"Ankora\u016d neniuj atributoj estas difinitaj por \u0109i tiu foto.","semantics_hide_all_tags":"Maski la atributojn","semantics_key":"\u015closilo","semantics_value":"Valoro","semantics_show_all_tags":"Vidi \u0109iujn atributojn","semantics_tags_picture":"Foto-atributoj","semantics_value_doc":"Lernu pli pri \u0109i tiu atributo","semantics_qualifiers":"Kvalifikiloj","semantics_hide_annotations":"Maski bildajn komentojn","semantics_wikidata_properties":{"P279":"subklaso de","P361":"parto de","P31":"instanco de"},"share_picture":"Foto","semantics_annotation_tooltip":"Alklaku por vidi la detalojn","semantics_show_annotations":"Montri bildajn komentojn","semantics_key_doc":"Lernu pli pri \u0109i tiu \u015dlosilo"},"maplibre":{"GeolocateControl.FindMyLocation":"Trovi mian pozicion","GeolocateControl.LocationNotAvailable":"Loko ne disponeblas"},"map":{"slow_loading":"La mapo \u015dar\u011das malrapide kaj povus aperi rompi\u011dinta","loading":"\u015car\u011danto\u2026","thumbnail":"Miniaturo de la surflikta bildo","not_public":"Ne publike videbla","more_panoramax":"Malkovri pli pri Panoramax","map_data":"Kartaj datumoj : {m}"}}')},8302:ae=>{"use strict";ae.exports=JSON.parse('{"pnx":{"report_auth":"La denuncia se enviar\xe1 usando tu cuenta \xab{a}\xbb","report":"Denunciar imagen","report_nature_label":"Tipo de problema","report_nature":{"":"Selecciona el tipo de problema\u2026","blur_missing":"Se ve el rostro de una persona, o una matr\xedcula","blur_excess":"Est\xe1 borroso un objeto que no hac\xeda falta ocultar","inappropriate":"La imagen no es apropiada (irrelevante, desnudez, \u2026)","privacy":"Se ve un camino privado, o una propiedad privada","mislocated":"La localizaci\xf3n de la imagen en el mapa no es correcta","picture_low_quality":"La calidad de la imagen es pobre","copyright":"La imagen infringe derechos de autor","other":"Otro tipo de problema"},"sequence_more":"M\xe1s opciones de reproducci\xf3n","sequence_speed":"Velocidad de reproducci\xf3n","legend_license":"Licencia: {l}","edit_osm":"Editar OpenStreetMap","id":"iD","josm":"JOSM","josm_live":"Activar la sincronizaci\xf3n autom\xe1tica de JOSM cuando se carga una imagen","loading_labels_serious":["\ud83d\uddfa\ufe0f Cargando datos del mapa","\ud83d\udda5\ufe0f Consultando la API","\ud83d\uddbc\ufe0f Cargando vistas previas","\ud83d\udd0d Analizando metadatos EXIF","\ud83c\udfd8\ufe0f Renderizado 3D","\ud83d\udcf7 Preparando im\xe1genes 360\xb0","\ud83d\udfe0 Ajustando balance de color","\ud83d\udcaf C\xe1lculo del nivel de calidad \xa9"],"metadata":"Metadatos de la imagen","map_theme_type":"Tipo de c\xe1mara","contrast":"Dar m\xe1s contraste a la imagen","zoom":"Acercar/alejar","zoomOut":"Alejar","map_background_streets":"Calles","loading_labels_fun":["\ud83e\udd8c Detectando paneles de cruce de alces","\ud83d\ude98 Buscando el Coche Panoramax \xa9","\u2615 Inyectando cafe\xedna","\ud83d\ude00 \xa1Sonr\xede, est\xe1s siendo mapeado!","\ud83d\udc08 Compartiendo fotos de gatos","\ud83d\ude34 Reduciendo la procrastinaci\xf3n","\ud83e\uded6 Preparando el t\xe9","\ud83d\udc27 Abriendo el c\xf3digo fuente","\ud83d\ude87 Indexando estaciones del metro","\ud83e\uddf9 Limpieza de metadatos","\ud83d\ude92 Enviando fotos de estaciones de bomberos","\ud83d\udeb2 Actualizando v\xedas verdes","\ud83d\ude89 Paseo por el and\xe9n de la estaci\xf3n","\ud83d\udef0\ufe0f Buscando sat\xe9lites","\ud83d\udc65 Describiendo tipolog\xedas de persona","\ud83d\udc1f Localizando tiendas de fish & chips","\ud83e\uddd1\u200d\ud83d\udcbb Buscando gazapos de la interfaz","\ud83d\udcc8 Incrementando estad\xedsticas"],"metadata_general_license_link":"Ir a la descripci\xf3n completa de la licencia","metadata_general_picid":"Identificador de la imagen","metadata_general_license":"Licencia","report_details_placeholder":"Opcional; puedes a\xf1adir m\xe1s detalles sobre el problema y por qu\xe9 te preocupa","expand":"Expandir","expand_info":"Mostrar el elemento ocupando toda la p\xe1gina","show_psv":"Mostrar el visor de im\xe1genes","show_map":"Mostrar el mapa","zoomIn":"Acercar","moveUp":"Desplazar hacia arriba","moveDown":"Desplazar hacia abajo","moveLeft":"Desplazar hacia la izquierda","moveRight":"Desplazar hacia la derecha","moveMiddle":"Centrar la vista","minimize":"Esconder este elemento. Para mostrarlo de nuevo, pulsa el bot\xf3n en la esquina inferior izquierda","options":"Opciones","filters":"Filtros","layers":"Capas","search":"Buscar","search_empty":"No se encontraron resultados","search_address":"Buscar una direcci\xf3n, una ciudad, \u2026","search_user":"Buscar un usuario\u2026","share":"Compartir","share_links":"Enlaces","share_page":"Enlace a esta p\xe1gina","share_image":"Imagen de alta calidad","share_rss":"Flujo RSS","share_rss_title":"Flujo RSS de las nuevas secuencias en el \xe1rea visible del mapa","share_embed":"Incrustar en tu p\xe1gina web","share_embed_docs":"M\xe1s informaci\xf3n sobre c\xf3mo configurar el incrustado","share_print":"Imprimir","copy":"Copiar","copied":"Copiado","error":"Hay un problema\u2026","sequence_next":"Siguiente imagen de la secuencia","sequence_play":"Reproducir esta secuencia","sequence_pause":"Pausar la secuencia","sequence_prev":"Imagen anterior de la secuencia","error_click":"Continuar","error_retry":"Por favor, int\xe9ntalo m\xe1s tarde","error_psv":"El visor de fotos esf\xe9ricas no se carga correctamente","error_pic":"No se encuentra la imagen que quer\xedamos","error_nopic":"No hay im\xe1genes para la posici\xf3n dada","error_api":"El servidor de im\xe1genes no est\xe1 disponible","error_webgl":"Este navegador no admite WebGL","error_josm":"JOSM no responde. \xbfEst\xe1 abierto, y admite el modo de Control Remoto?","error_api_compatibility":"El servidor de im\xe1genes no es compatible con esta versi\xf3n del visor","filter_date":"Fecha","filter_user":"Usuario","filter_picture":"Tipo de imagen","filter_zoom_in":"Ac\xe9rcate para poder ver filtros","picture_flat":"Cl\xe1sico","picture_360":"360\xb0","filter_camera_model":"Por modelo de c\xe1mara","map_background":"Fondo de mapa","map_background_aerial":"Vista a\xe9rea","map_theme":"Tema de mapa","map_theme_default":"Cl\xe1sico","map_theme_age":"Fecha de toma de imagen","map_theme_age_1":"M\xe1s de dos a\xf1os","map_theme_age_2":"Menos de dos a\xf1os","map_theme_age_3":"Menos de un a\xf1o","map_theme_age_4":"Menos de un mes","metadata_general_seqid":"Identificador de la secuencia","metadata_general_picid_link":"Ir a la descripci\xf3n de la imagen en formato JSON","metadata_general_seqid_link":"Ir a la descripci\xf3n de la secuencia en formato JSON","metadata_general_author":"Autor","metadata_general_date":"Fecha de toma de imagen","metadata_camera":"C\xe1mara","metadata_camera_make":"Marca","metadata_camera_model":"Modelo","metadata_camera_type":"Tipo","metadata_camera_focal_length":"Distancia focal","metadata_location":"Localizaci\xf3n","metadata_location_longitude":"Longitud","metadata_location_latitude":"Latitud","metadata_location_orientation":"Orientaci\xf3n","metadata_location_precision":"Precisi\xf3n de la localizaci\xf3n","metadata_exif":"EXIF / XMP","metadata_exif_name":"Etiqueta","metadata_exif_value":"Valor","report_whole_sequence":"El problema afecta a la secuencia entera","report_details":"M\xe1s detalles","report_email":"Tu direcci\xf3n de correo electr\xf3nico","report_email_placeholder":"Opcional","report_submit":"Enviar","report_success":"La denuncia se ha enviado correctamente. Ser\xe1 revisada lo antes posible.","report_failure":"Ocurri\xf3 un error al crear la denuncia: {e}. Por favor, int\xe9ntalo m\xe1s tarde.","map_theme_score":"Nivel de calidad","filter_qualityscore":"Nivel de calidad","filter_qualityscore_help":"Haga clic para habilitar o deshabilitar","legend_title":"Ver detalles de la imagen","metadata_camera_resolution":"Resoluci\xf3n","metadata_quality":"Puntuaci\xf3n de calidad","metadata_quality_help":"M\xe1s informaci\xf3n sobre el nivel de calidad","metadata_quality_score":"Valoraci\xf3n general","metadata_quality_gps_score":"Puntuaci\xf3n de posicionamiento","metadata_quality_resolution_score":"Puntuaci\xf3n de resoluci\xf3n","metadata_quality_missing":"no hay informaci\xf3n en la imagen","report_wait":"Env\xedo del informe\u2026"},"psv":{"ctrlZoom":"Utiliza Control+rueda de desplazamiento para acercar/alejar","loadError":"Este panorama no se puede cargar","twoFingers":"Desplaza el mapa con dos dedos"},"maplibre":{"GeolocateControl.FindMyLocation":"Local\xedzame","GeolocateControl.LocationNotAvailable":"Localizaci\xf3n no disponible"},"map":{"loading":"Cargando\u2026","thumbnail":"Vista previa de la imagen bajo el cursor","not_public":"No es visible p\xfablicamente","slow_loading":"La mapa tarda mucho en cargarse y puede parecer rota"}}')},5222:ae=>{"use strict";ae.exports=JSON.parse('{"psv":{"twoFingers":"Utilisez deux doigts pour vous d\xe9placer","ctrlZoom":"Utilisez ctrl + scroll pour zoomer dans l\'image","loadError":"L\'image ne peut pas \xeatre charg\xe9e"},"maplibre":{"GeolocateControl.FindMyLocation":"Afficher ma position","GeolocateControl.LocationNotAvailable":"GPS non-disponible"},"pnx":{"zoom":"Zoom","zoomOut":"D\xe9zoomer","zoomIn":"Zoomer","moveUp":"Vers le haut","moveDown":"Vers le bas","moveLeft":"Vers la gauche","moveRight":"Vers la droite","moveMiddle":"Centrer la vue","expand":"Agrandir","expand_info":"Faire appara\xeetre ce widget en pleine page","show_psv":"Afficher la visionneuse de photos","show_map":"Afficher la carte","minimize":"Masquer ce widget, vous pouvez l\'afficher de nouveau gr\xe2ce au bouton dans le coin en bas \xe0 gauche","minimize_short":"Masquer","options":"Options","filters":"Filtres","layers":"Calques","search":"Rechercher","search_empty":"Aucun r\xe9sultat","search_address":"Rechercher une adresse, ville\u2026","search_user":"Rechercher un nom d\'utilisateur\u2026","share":"Partager","share_links":"Liens utiles","share_page":"Lien de la photo","share_image":"Image HD","share_rss":"Flux RSS","share_rss_title":"Flux RSS des nouvelles s\xe9quences dans la zone visible sur la carte","share_embed":"Int\xe9gration sur votre site","share_embed_docs":"D\xe9couvrir plus de possibilit\xe9s pour l\'int\xe9gration sur votre site","share_print":"Imprimer","panoramax":"Panoramax","whats_panoramax":"Panoramax est le g\xe9ocommun des photos des territoires.","copy":"Copier","copied":"Copi\xe9","error":"On a un probl\xe8me\u2026","error_click":"Continuer","error_retry":"Merci de r\xe9essayer plus tard","sequence_next":"Photo suivante dans la s\xe9quence","sequence_play":"Parcourir cette s\xe9quence","sequence_pause":"Mettre en pause la s\xe9quence","sequence_prev":"Photo pr\xe9c\xe9dente dans la s\xe9quence","sequence_more":"Plus d\'options de lecture","sequence_speed":"Vitesse de lecture","legend_license":"Licence : {l}","legend_title":"Afficher les d\xe9tails de l\'image","id":"iD","contribute_id":"Contribuez \xe0 OpenStreetMap avec l\'\xe9diteur iD","geo_uri":"App externe","josm":"JOSM","josm_live":"Active la synchronisation automatique de JOSM lors du chargement d\'une photo","loading_labels_serious":["\ud83d\uddfa\ufe0f Chargement du fond de carte","\ud83d\udda5\ufe0f Interrogation de l\'API","\ud83d\uddbc\ufe0f Chargement des miniatures","\ud83d\udd0d Analyse des m\xe9tadonn\xe9es EXIF","\ud83c\udfd8\ufe0f Cr\xe9ation du rendu 3D","\ud83d\udcf7 Initialisation des vues 360\xb0","\ud83d\udfe0 \xc9quilibrage des couleurs","\ud83d\udcaf Calcul du score qualit\xe9 \xa9","\ud83d\udce1 T\xe9l\xe9chargement des mises \xe0 jour","\ud83c\udf0d R\xe9cup\xe9ration des tuiles","\ud83d\udcf8 Traitement des ombres"],"loading_labels_fun":["\ud83e\udd8c D\xe9tection des panneaux biche","\ud83d\ude98 Recherche de la Panoramax Car \xa9","\u2615 Injection de caf\xe9ine","\ud83d\ude00 Souriez, vous \xeates mapp\xe9s !","\ud83d\udc08 Partage de photos de chats","\ud83d\ude34 R\xe9duction de la procrastination","\ud83c\uddf7\ud83c\uddea Chargement : 974%","\ud83d\udc27 Ouverture du code source","\ud83e\udd81 Indexation des traboules","\ud83e\uddf9 Nettoyage des m\xe9tadonn\xe9es","\ud83d\ude92 Envoi des photos du SDIS","\ud83d\udeb2 Mise \xe0 jour des voies vertes","\ud83d\ude89 Remont\xe9e des quais de gare","\ud83d\udef0\ufe0f Recherche de satellites","\ud83d\udc65 \xc9criture des personas","\ud83e\udd5e Localisation des cr\xeaperies","\ud83e\uddd1\u200d\ud83d\udcbb D\xe9boguage de l\'interface","\ud83d\udcc8 Incr\xe9mentation des statistiques","\ud83e\udd16 Apprentissage de la s\xe9mantique","\ud83c\udfa8 Redesign de l\'interface","\ud83d\udcc5 Planification des photos-carto-parties","\ud83e\uddc0 Affinage des fromages","\ud83c\udf04 Calcul de l\'ensoleillement corse","\ud83c\udf0a Mesure des grandes mar\xe9es"],"error_psv":"Photo Sphere Viewer ne s\'est pas charg\xe9 correctement","error_pic":"La photo demand\xe9e est introuvable","error_nopic":"Aucune photo disponible autour de la localisation recherch\xe9e","error_api":"Le serveur de photos n\'est pas disponible","error_webgl":"WebGL n\'est pas support\xe9 par votre navigateur","error_josm":"JOSM n\'a pas r\xe9pondu, est-il bien lanc\xe9 et la t\xe9l\xe9commande activ\xe9e ?","error_api_compatibility":"Le serveur de photos n\'est pas compatible avec cette visionneuse","filter_date":"Date","filter_date_1month":"1 mois","filter_date_6months":"6 mois","filter_date_1year":"1 an","filter_user":"Utilisateur","filter_user_mypics":"Mes photos","filter_picture":"Type d\'image","picture_all":"Tout","picture_flat":"Classique","picture_360":"360\xb0","picture_flat_long":"Photo classique","picture_360_long":"Photo panoramique","filter_qualityscore":"Score de qualit\xe9","filter_qualityscore_help":"Cliquez pour activer ou d\xe9sactiver","qualityscore_title":"\xc0 propos du score de qualit\xe9","qualityscore_doc_1":"Panoramax propose un Score de Qualit\xe9 pour chacune de ses photos. Cela facilite le filtre et la recherche de photos de bonne qualit\xe9 sur la carte.","qualityscore_doc_2":"Le score est affich\xe9 sous la forme d\'une lettre A/B/C/D/E (A \xe9tant le meilleur, E le moins bon), et visualisable gr\xe2ce \xe0 cette \xe9chelle :","qualityscore_doc_3":"Il est calcul\xe9 en fonction de la pr\xe9cision du GPS ainsi que la r\xe9solution de la photo. Un mat\xe9riel professionnel aura une note de A, une cam\xe9ra sportive 360\xb0 une note de B, et un smartphone une note de C \xe0 E.","qualityscore_doc_link":"En savoir plus sur le Score de Qualit\xe9","filter_zoom_in":"Zoomez la carte pour voir ce filtre","filter_gps_precision":"Pr\xe9cision du positionnement","filter_gps_precision_lessthan":"Moins de {n} m\xe8tres","filter_gps_precision_between":"Entre {n1} et {n2} m\xe8tres","filter_gps_precision_morethan":"Plus de {n} m\xe8tres","map_background":"Fond de carte","map_background_aerial":"Satellite","map_background_streets":"Plan","map_theme":"Rendu de carte","map_theme_default":"Classique","map_theme_age":"Date de prise de vue","map_theme_age_1":"> 2 ans","map_theme_age_2":"< 2 ans","map_theme_age_3":"< 1 an","map_theme_age_4":"< 1 mois","map_theme_type":"Type de cam\xe9ra","map_theme_score":"Score de qualit\xe9","map_theme_gps":"Pr\xe9cision du positionnement","contrast":"Augmenter le contraste de l\'image","metadata":"M\xe9tadonn\xe9es de la photo","metadata_summary":"R\xe9sum\xe9","metadata_general_copy_id":"Copier l\'ID","metadata_general_copy_picid":"Copier l\'ID de photo","metadata_general_picid":"Photo","metadata_general_seqid":"S\xe9quence","metadata_general_picid_link":"Aller au descriptif JSON de la photo","metadata_general_seqid_link":"Aller au descriptif JSON de la s\xe9quence","metadata_general_author":"Auteur","metadata_general_license":"Licence","metadata_general_license_link":"Voir la description compl\xe8te de la licence","metadata_general_date":"Date de prise de vue","metadata_general_instance":"Instance d\'origine","metadata_camera":"Appareil","metadata_camera_make":"Fabricant","metadata_camera_model":"Mod\xe8le","metadata_camera_type":"Type","metadata_camera_resolution":"R\xe9solution","metadata_camera_focal_length":"Longueur focale","metadata_location":"Position","metadata_location_coordinates":"Coordonn\xe9es (longitude, latitude)","metadata_location_orientation":"Direction","metadata_location_precision":"Pr\xe9cision du positionnement","metadata_location_copy":"Copier {v}","metadata_location_copy_more":"Copier d\'autres formats de coordonn\xe9es","metadata_quality":"Qualit\xe9","metadata_quality_help":"En savoir plus sur le score de qualit\xe9","metadata_quality_score":"Note globale","metadata_quality_gps_score":"Note du positionnement","metadata_quality_resolution_score":"Note de la r\xe9solution","metadata_quality_missing":"pas d\'info dans l\'image","metadata_exif":"EXIF","metadata_exif_name":"Balise","metadata_exif_value":"Valeur","metadata_exif_doc":"Doc des attributs EXIF","metadata_exif_doc_title":"Ac\xe9\xe9der \xe0 la doc Exiv2 pour en savoir plus sur les attributs EXIF et XMP","semantics_title":"Tags","semantics_tags":"{nb} attributs","semantics_features":"Objets dans la photo","semantics_features_none":"Aucun objet n\'a \xe9t\xe9 dessin\xe9 dans cette photo pour l\'instant.","semantics_features_default_title":"Tag {nb}","semantics_features_subtitle":"{nb} attributs associ\xe9s","semantics_annotation_tooltip":"Cliquez pour voir les d\xe9tails","semantics_show_all_tags":"Voir tous les attributs","semantics_hide_all_tags":"Masquer les attributs","semantics_key":"Cl\xe9","semantics_value":"Valeur","semantics_sequence_tags":"Tag de s\xe9quence","semantics_picture_tags":"Tag de photo","semantics_annotation_tags":"Tag d\'un objet","semantics_doc":"Aide","semantics_doc_title":"\xc0 propos des tags","semantics_doc_info1":"Pr\xe9cisez le contexte d\'une photo en utilisant un tag. Indiquez par exemple qu\'elle a \xe9t\xe9 prise en voiture avec le tag transport=car.","semantics_doc_info2":"Vous pouvez \xe9galement d\xe9tourer des objets au sein d\'une photo\u202f: panneaux routiers, mobilier urbain\u2026 Pr\xe9cisez ce que vous voyez en utilisant les tags existants. Vous pouvez \xe9galement cr\xe9er votre propre tag si besoin.","semantics_doc_info3":"Certains objets sont d\xe9tect\xe9s automatiquement par IA : il n\'y a pas de garantie de qualit\xe9.","semantics_doc_link":"En savoir plus (documentation compl\xe8te en anglais)","semantics_key_doc":"En savoir plus \xe0 propos de cette cl\xe9","semantics_value_doc":"En savoir plus \xe0 propos de cet attribut","semantics_qualifiers":"Qualificateurs","semantics_show_annotations":"Afficher les objets dans la photo","semantics_hide_annotations":"Masquer les objets dans la photo","semantics_zero_annotations":"Aucun objet dessin\xe9 dans cette photo","semantics_add_annotation":"Ajouter un nouveau tag","semantics_draw_annotation":"Vous pouvez dessiner l\'emplacement de l\'objet \xe0 cr\xe9er sur la photo (Optionnel).","semantics_erase_annotation":"Effacer l\'objet dessin\xe9","semantics_delete_annotation":"Supprimer cet objet","semantics_delete_annotation_confirm":"\xcates-vous s\xfbr(e) de vouloir supprimer ce tag ?","semantics_wikidata_properties":{"P31":"instance de","P279":"sous-classe de","P361":"partie de"},"semantics_editor_error":"La syntaxe est invalide. Vos attributs doivent avoir cette forme:\\ncl\xe9=valeur\\npr\xe9fixe|cl\xe9=valeur\\npr\xe9fixe|cl\xe9[qualif_cl\xe9=qualif_val]=valeur\\n\\nLongueur max des cl\xe9s : 256 caract\xe8res, max des valeurs 2048 caract\xe8res.","semantics_editor_example":"cl\xe9=valeur\\npr\xe9fixe|cl\xe9=valeur","semantics_edit":"Modifier les attributs","semantics_save":"Enregistrer vos modifications","semantics_undo":"Annuler vos modifications","semantics_send_fail":"Impossible d\'enregistrer vos modifications, merci de r\xe9essayer plus tard","semantics_login_needed":"Afin de pouvoir modifier les attributs ou objets de la photo, vous devez vous connecter sur l\'instance Panoramax {n}. Voulez-vous vous connecter ?","report":"Signaler","report_auth":"Ce signalement sera envoy\xe9 en utilisant votre compte \\"{a}\\"","report_nature_label":"Nature du probl\xe8me","report_nature":{"":"S\xe9lectionnez la nature du probl\xe8me\u2026","blur_missing":"Un visage ou une plaque d\'immatriculation est visible","blur_excess":"Un objet a \xe9t\xe9 sur-flout\xe9","inappropriate":"L\'image est inappropri\xe9e (non pertinente, nudit\xe9\u2026)","privacy":"Un chemin priv\xe9 ou une propri\xe9t\xe9 priv\xe9e est visible","picture_low_quality":"L\'image est de mauvaise qualit\xe9","mislocated":"L\'image est mal g\xe9olocalis\xe9e","copyright":"L\'image enfreint les droits d\'auteur","other":"Tout autre type de probl\xe8me"},"report_whole_sequence":"Cela concerne toute la s\xe9quence","report_details":"D\xe9tails suppl\xe9mentaires","report_details_placeholder":"Optionnel, vous pouvez ajouter des d\xe9tails sur le probl\xe8me","report_email":"Votre email","report_email_placeholder":"Optionnel","report_submit":"Envoyer","report_wait":"Envoi du signalement en cours\u2026","report_success":"Le signalement a \xe9t\xe9 envoy\xe9 avec succ\xe8s. Il sera examin\xe9 d\xe8s que possible.","report_failure":"Une erreur est survenue lors de la cr\xe9ation du signalement : {e}. Veuillez r\xe9essayer plus tard."},"map":{"loading":"Chargement\u2026","thumbnail":"Miniature de la photo survol\xe9e","not_public":"Masqu\xe9 au public","slow_loading":"La carte est longue \xe0 charger et pourrait appara\xeetre cass\xe9e","map_data":"Carte bas\xe9e sur {m}","more_panoramax":"En savoir plus sur Panoramax"}}')},6909:ae=>{"use strict";ae.exports=JSON.parse('{"psv":{"twoFingers":"K\xe9t ujjal navig\xe1lhat","ctrlZoom":"K\xf6zel\xedt\xe9s vagy t\xe1vol\xedt\xe1s: Ctrl + g\xf6rget\xe9s","loadError":"A panor\xe1ma nem t\xf6lthet\u0151 be"},"pnx":{"zoom":"Nagy\xedt\xe1s","zoomOut":"T\xe1vol\xedt\xe1s","zoomIn":"K\xf6zel\xedt\xe9s","moveUp":"Mozg\xe1s fel","moveDown":"Mozg\xe1s le","moveLeft":"Mozg\xe1s balra","moveRight":"Mozg\xe1s jobbra","moveMiddle":"N\xe9zet k\xf6z\xe9pre hoz\xe1sa","expand":"B\u0151v\xedt\xe9s","expand_info":"Widget megjelen\xedt\xe9se teljes oldalon","show_psv":"K\xe9pn\xe9zeget\u0151 megjelen\xedt\xe9se","show_map":"T\xe9rk\xe9p megjelen\xedt\xe9se","minimize":"Widget elrejt\xe9se; a bal als\xf3 sarokban l\xe9v\u0151 gombbal \xfajra megjelen\xedtheti","options":"Be\xe1ll\xedt\xe1sok","filters":"Sz\u0171r\u0151k","layers":"R\xe9tegek","share":"Megoszt\xe1s","search":"Keres\xe9s","search_empty":"Nincs tal\xe1lat","share_links":"Linkek","share_page":"Link erre az oldalra","share_image":"Nagy felbont\xe1s\xfa (HD) k\xe9p","share_rss":"RSS h\xedrcsatorna","share_rss_title":"A t\xe9rk\xe9p l\xe1that\xf3 ter\xfclet\xe9n l\xe9v\u0151 \xfaj sorozatok RSS-h\xedrcsatorn\xe1ja","share_embed":"Be\xe1gyaz\xe1s a weboldaladon","share_print":"Nyomtat\xe1s","copy":"M\xe1sol\xe1s","copied":"M\xe1solva","error":"Ajjaj, baj van\u2026","error_subtitle":"Pr\xf3b\xe1lja \xfajra k\xe9s\u0151bb, vagy n\xe9zze meg a b\xf6ng\xe9sz\u0151konzolt a tov\xe1bbi r\xe9szletek\xe9rt.","sequence_next":"A sorozat k\xf6vetkez\u0151 k\xe9pe","sequence_play":"Sorozat lej\xe1tsz\xe1sa","sequence_pause":"Sorozatlej\xe1tsz\xe1s sz\xfcneteltet\xe9se","sequence_prev":"A sorozat el\u0151z\u0151 k\xe9pe","sequence_more":"Tov\xe1bbi lej\xe1tsz\xe1si lehet\u0151s\xe9gek","sequence_speed":"Lej\xe1tsz\xe1s sebess\xe9ge","legend_license":"Licenc: {l}","edit_osm":"OSM szerkeszt\xe9se","id":"iD","josm":"JOSM","josm_live":"JOSM automatikus szinkroniz\xe1l\xe1s\xe1nak enged\xe9lyez\xe9se k\xe9pbet\xf6lt\xe9skor","loading_labels_serious":["\ud83d\uddfa\ufe0f T\xe9rk\xe9padatok bet\xf6lt\xe9se","\ud83d\udda5\ufe0f API lek\xe9rdez\xe9se","\ud83d\uddbc\ufe0f B\xe9lyegk\xe9pek bet\xf6lt\xe9se","\ud83d\udd0d EXIF metaadatok elemz\xe9se","\ud83c\udfd8\ufe0f 3D megjelen\xedt\xe9s","\ud83d\udcf7 360\xb0-os k\xe9pek inicializ\xe1l\xe1sa","\ud83d\udfe0 Sz\xednek kiegyenl\xedt\xe9se","\ud83d\udcaf Min\u0151s\xe9gi pontsz\xe1m kisz\xe1m\xedt\xe1sa \xa9"],"loading_labels_fun":["\ud83e\udd8c Vadvesz\xe9lyt jelz\u0151 t\xe1bla \xe9szlel\xe9se","\ud83d\ude98 Panoramax aut\xf3 \xa9 keres\xe9se","\u2615 Koffeininjekci\xf3","\ud83d\ude00 Mosolyogj, fel lett\xe9l t\xe9rk\xe9pezve!","\ud83d\udc08 Kiscic\xe1s k\xe9pek megoszt\xe1sa","\ud83d\ude34 Halogat\xe1s cs\xf6kkent\xe9se","\ud83e\uded6 Tea megf\u0151z\xe9se","\ud83d\udc27 Forr\xe1sk\xf3d felnyit\xe1sa","\ud83d\ude87 Metr\xf3\xe1llom\xe1sok indexel\xe9se","\ud83e\uddf9 Metaadatok tisztogat\xe1sa","\ud83d\ude92 T\u0171zolt\xf3s\xe1gr\xf3l sz\xf3l\xf3 fot\xf3k bek\xfcld\xe9se","\ud83d\udeb2 Z\xf6ldutak friss\xedt\xe9se","\ud83d\ude89 Peronok bej\xe1r\xe1sa","\ud83d\udef0\ufe0f M\u0171holdak keres\xe9se","\ud83d\udc65 Person\xe1k meg\xedr\xe1sa","\ud83d\udc1f S\xfcltkrumplikap\xf3k lokaliz\xe1l\xe1sa","\ud83e\uddd1\u200d\ud83d\udcbb Hibakeres\u0151 fel\xfclet","\ud83d\udcc8 Statisztika n\xf6vel\xe9se"],"error_psv":"A Photo Sphere Viewer (g\xf6mbpanor\xe1ma-n\xe9zeget\u0151) nem t\xf6lt\u0151dik be megfelel\u0151en","error_pic":"A k\xe9rt k\xe9p nem tal\xe1lhat\xf3","error_nopic":"Az adott helyen nem \xe9rhet\u0151 el k\xe9p","error_api":"A k\xe9pkiszolg\xe1l\xf3 nem \xe9rhet\u0151 el","error_webgl":"A WebGL nem t\xe1mogatott ebben a b\xf6ng\xe9sz\u0151ben","error_josm":"A JOSM nem v\xe1laszol. Val\xf3ban fut \xe9s el\xe9rhet\u0151 t\xe1volr\xf3l?","error_api_compatibility":"A k\xe9pkiszolg\xe1l\xf3 nem kompatibilis a k\xe9pn\xe9zeget\u0151 ezen verzi\xf3j\xe1val","filter_date":"D\xe1tum szerint","filter_user":"Felhaszn\xe1l\xf3 szerint","filter_picture":"K\xe9pt\xedpus szerint","picture_flat":"Klasszikus","picture_360":"360\xb0","filter_camera_model":"Kameramodell szerint","map_background":"T\xe9rk\xe9ph\xe1tt\xe9r","map_background_aerial":"L\xe9gi felv\xe9tel","map_background_streets":"k\xe9pUtca","map_theme":"T\xe9rk\xe9p t\xe9m\xe1ja","map_theme_default":"Klasszikus","map_theme_age":"K\xe9pk\xe9sz\xedt\xe9s ideje","map_theme_age_1":"> 2 \xe9ve","map_theme_age_2":"< 2 \xe9ve","map_theme_age_3":"< 1 \xe9ve","map_theme_age_4":"< 1 h\xf3napja","map_theme_type":"Kamerat\xedpus","contrast":"Nagyobb k\xe9pkontraszt enged\xe9lyez\xe9se","metadata":"K\xe9p metaadatai","metadata_general_picid":"K\xe9p azonos\xedt\xf3js","metadata_general_seqid":"Sorozat azonos\xedt\xf3ja","metadata_general_picid_link":"Ugr\xe1s a k\xe9p JSON le\xedr\xe1s\xe1hoz","metadata_general_seqid_link":"Ugr\xe1s a sorozat JSON le\xedr\xe1s\xe1hoz","metadata_general_author":"Szerz\u0151","metadata_general_license":"Licenc (enged\xe9ly)","metadata_general_license_link":"Ugr\xe1s a licenc teljes le\xedr\xe1s\xe1hoz","metadata_general_date":"K\xe9sz\xedt\xe9s d\xe1tuma","metadata_camera":"Kamera","metadata_camera_make":"Gy\xe1rt\xf3","metadata_camera_model":"Modell","metadata_camera_type":"T\xedpus","metadata_camera_focal_length":"Gy\xfajt\xf3t\xe1vols\xe1g","metadata_location":"Helysz\xedn","metadata_location_longitude":"Hossz\xfas\xe1g","metadata_location_latitude":"Sz\xe9less\xe9g","metadata_location_orientation":"Felv\xe9tel ir\xe1nya","metadata_location_precision":"Helymeghat\xe1roz\xe1s pontoss\xe1ga","metadata_exif":"EXIF / XMP","metadata_exif_name":"C\xedmke","metadata_exif_value":"\xc9rt\xe9k","report":"K\xe9p bejelent\xe9se","report_auth":"A jelent\xe9s a fi\xf3kod ({a}) felhaszn\xe1l\xe1s\xe1val lesz elk\xfcldve","report_nature":{"":"Probl\xe9ma jelleg\xe9nek kiv\xe1laszt\xe1sa\u2026","blur_missing":"A k\xe9pen l\xe1tszik egy szem\xe9ly arca vagy egy rendsz\xe1mt\xe1bla","blur_excess":"A k\xe9pen el van hom\xe1lyos\xedtva egy olyan objektum, amelynek \xe9lesnek kellene lennie","inappropriate":"A k\xe9p nem megfelel\u0151 (irrelev\xe1ns, meztelens\xe9get jelen\xedt meg stb.)","privacy":"A k\xe9pen mag\xe1n\xfat vagy mag\xe1nter\xfclet l\xe1that\xf3","picture_low_quality":"A k\xe9p nagyon rossz min\u0151s\xe9g\u0171","mislocated":"A k\xe9p rosszul van elhelyezve a t\xe9rk\xe9pen","copyright":"A k\xe9p szerz\u0151i jogot s\xe9rt","other":"B\xe1rmilyen m\xe1s jelleg\u0171 probl\xe9ma"},"report_nature_label":"Probl\xe9ma jellege","report_details":"Tov\xe1bbi r\xe9szletek","filter_zoom_in":"Nagy\xedts a sz\u0171r\u0151k l\xe1that\xf3v\xe1 t\xe9tel\xe9hez","report_email":"E-mail-c\xedm","report_email_placeholder":"Nem k\xf6telez\u0151","report_submit":"Bek\xfcld\xe9s","report_success":"A jelent\xe9s sikeresen be lett k\xfcldve; a lehet\u0151 leghamarabb megvizsg\xe1ljuk.","report_failure":"Hiba t\xf6rt\xe9nt a jelent\xe9s l\xe9trehoz\xe1sakor: {e}. K\xe9rj\xfck, pr\xf3b\xe1ld meg k\xe9s\u0151bb \xfajra.","search_user":"Felhaszn\xe1l\xf3n\xe9v keres\xe9se\u2026","search_address":"C\xedm, v\xe1ros stb. keres\xe9se\u2026","share_embed_docs":"Tov\xe1bbi inform\xe1ci\xf3 a be\xe1gyaz\xe1s konfigur\xe1l\xe1s\xe1r\xf3l","error_click":"Kattints a folytat\xe1shoz","error_retry":"K\xe9rj\xfck, pr\xf3b\xe1ld meg k\xe9s\u0151bb","legend_title":"K\xe9p adatainak megjelen\xedt\xe9se","report_whole_sequence":"A teljes sorozatra vonatkozik","report_wait":"Jelent\xe9s bek\xfcld\xe9se folyamatban\u2026","report_details_placeholder":"Megadhatsz tov\xe1bbi r\xe9szleteket a probl\xe9m\xe1r\xf3l (nem k\xf6telez\u0151)","filter_qualityscore_help":"Kattints az enged\xe9lyez\xe9shez vagy a letilt\xe1shoz","filter_qualityscore":"Min\u0151s\xe9gi pontsz\xe1m","map_theme_score":"Min\u0151s\xe9gi pontsz\xe1m","metadata_camera_resolution":"Felbont\xe1s","metadata_quality":"Min\u0151s\xe9gi pontsz\xe1m","metadata_quality_help":"Tov\xe1bbi tudnival\xf3k a min\u0151s\xe9gi pontsz\xe1mr\xf3l","metadata_quality_score":"\xd6sszes\xedtett pontsz\xe1m","metadata_quality_gps_score":"Pozicion\xe1l\xe1si pontsz\xe1m","metadata_quality_resolution_score":"Felbont\xe1si pontsz\xe1m","metadata_quality_missing":"a k\xe9pben nincs megadva \xe9rt\xe9k"},"map":{"loading":"Bet\xf6lt\xe9s\u2026","thumbnail":"A kurzor alatti k\xe9p b\xe9lyegk\xe9pe","not_public":"Nem l\xe1that\xf3 nyilv\xe1nosan","slow_loading":"A t\xe9rk\xe9p lassan t\xf6lt\u0151dik be, \xe9s lehet, hogy lerobbant"},"maplibre":{"GeolocateControl.FindMyLocation":"Tart\xf3zkod\xe1si hely megtal\xe1l\xe1sa","GeolocateControl.LocationNotAvailable":"Tart\xf3zkod\xe1si hely nem \xe9rhet\u0151 el"}}')},4895:ae=>{"use strict";ae.exports=JSON.parse('{"pnx":{"expand":"Espandi","zoomOut":"Rimpicciolisci","zoomIn":"Ingrandisci","zoom":"Zoom","moveUp":"Muovi in alto","moveDown":"Muovi in basso","moveLeft":"Muovi a sinistra","moveRight":"Muovi a destra","expand_info":"Fai apparire il widget a schermo pieno","options":"Opzioni","filters":"Filtri","layers":"Livelli","search":"Cerca","search_empty":"Nessun risultato trovato","search_address":"Cerca un indirizzo, citt\xe0\u2026","search_user":"Cerca un nome utente\u2026","share":"Condividi","share_links":"Collegamenti","share_page":"Collegamento a questa immagine","share_image":"Immagine HD","share_embed":"Incorpora nel tuo sito web","share_embed_docs":"Scopri di pi\xf9 sulla configurazione della incorporazione","share_print":"Stampa","copy":"Copia","copied":"Copiato","error":"Abbiamo un problema\u2026","error_click":"Continuare","error_retry":"Riprovare pi\xf9 tardi","sequence_play":"Riproduci questa sequenza","sequence_pause":"Pausa la sequenza","sequence_speed":"Velocit\xe0 di riproduzione","legend_license":"Licenza: {l}","legend_title":"Mostra dettagli della foto","edit_osm":"Modifica OSM","loading_labels_serious":["\ud83d\uddfa\ufe0f Caricamento dei dati della mappa","\ud83d\udda5\ufe0f Interrogazione delle API","\ud83d\uddbc\ufe0f Caricamento delle miniature","\ud83d\udd0d Analisi dei metadata EXIF","\ud83c\udfd8\ufe0f Creazione del rendering 3D","\ud83d\udcf7 Inizializzazione delle foto a 360\xb0","\ud83d\udfe0 Bilanciamento del colore","\ud83d\udcaf Calcolo del punteggio della qualit\xe0 \xa9","\ud83d\udce1 Scaricamento degli aggiornamenti","\ud83c\udf0d Recupero dei tasselli della mappa","\ud83d\udcf8 Elaborazione delle ombre"],"loading_labels_fun":["\ud83e\udd8c Rilevazione dei cartelli di attraversamento dei cervi","\ud83d\ude98 Ricerca dell\u2019auto Panoramax \xa9","\u2615 Iniezione di caffeina","\ud83d\ude00 Sorridete, siete stati mappati!","\ud83d\udc08 Condivisione delle foto di gatti","\ud83d\ude34 Riduzione della procrastinazione","\ud83e\uded6 Preparazione del t\xe8","\ud83d\udc27 Apertura del codice sorgente","\ud83d\ude87 Indicizzazione delle stazioni della metro","\ud83e\uddf9 Pulizia dei metadata","\ud83d\ude92 Invio delle foto delle stazioni dei pompieri","\ud83d\udeb2 Aggiornamento delle strade verdi","\ud83d\ude89 Passeggiata sulle banchine della stazione","\ud83d\udef0\ufe0f Ricerca dei satelliti","\ud83d\udc65 Scrittura delle persone","\ud83d\udc1f Ricerca dei negozi di patatine fritte","\ud83e\uddd1\u200d\ud83d\udcbb Debug dell\u2019interfaccia","\ud83d\udcc8 Incremento delle statistiche","\ud83e\udd16 Apprendimento della semantica","\ud83c\udfa8 Riprogettazione dell\u2019interfaccia","\ud83d\udcc5 Pianificazione di eventi di photo-mapping","\ud83e\uddc0 Affinamento dei formaggi","\ud83c\udf04 Calcolo della nebbia in Valpadana","\ud83c\udf0a Misurazione delle grandi maree"],"error_psv":"Il visualizzatore delle foto sferiche non si sta caricando correttamente","error_pic":"La foto richiesta non \xe8 stata trovata","error_nopic":"Nessuna foto disponibile alla posizione richiesta","error_api":"Il server delle foto non \xe8 disponibile","error_webgl":"Il tuo browser non supporta WebGL","error_josm":"JOSM non risponde, \xe8 in esecuzione con il controllo remoto abilitato?","error_api_compatibility":"Il server delle foto non \xe8 compatibile con questa versione del visualizzatore","filter_date":"Data","filter_date_1month":"1 mese","filter_date_1year":"1 anno","filter_user_mypics":"Le mie foto","filter_picture":"Tipo di foto","filter_zoom_in":"Ingrandisci la mappa per vedere questo filtro","picture_flat":"Classica","picture_360":"360\xb0","filter_qualityscore_help":"Clicca per abilitare o disabilitare","map_background":"Sfondo della mappa","map_background_aerial":"Satellite","map_background_streets":"Strade","map_theme":"Tema della mappa","map_theme_default":"Classica","map_theme_age":"Data di acquisizione","map_theme_age_2":"< 2 anni","map_theme_age_3":"< 1 anno","map_theme_age_4":"< 1 mese","map_theme_score":"Punteggio della qualit\xe0","contrast":"Abilita un maggiore contrasto della foto","metadata":"Metadata della foto","metadata_general_picid":"Foto","metadata_general_picid_link":"Vai alla descrizione JSON della foto","metadata_general_seqid_link":"Vai alla descrizione JSON della sequenza","metadata_general_author":"Autore","metadata_general_license":"Licenza","metadata_general_date":"Data di acquisizione","metadata_camera":"Fotocamera","metadata_camera_make":"Costruttore","metadata_camera_model":"Modello","metadata_camera_type":"Tipo","metadata_camera_resolution":"Risoluzione","metadata_location":"Posizione","metadata_location_longitude":"Longitudine","metadata_location_latitude":"Latitudine","metadata_location_precision":"Precisione della posizione","metadata_quality":"Qualit\xe0","metadata_quality_score":"Punteggio globale","metadata_quality_gps_score":"Punteggio della posizione","metadata_quality_resolution_score":"Punteggio della risoluzione","metadata_exif":"EXIF","metadata_exif_name":"Attributo","report_auth":"Questa segnalazione verr\xe0 inviata usando la tua utenza \u201c{a}\u201d","report_nature_label":"Causa del problema","report_nature":{"blur_excess":"\xc8 stata applicata ad un oggetto una sfocatura non necessaria","inappropriate":"La foto \xe8 inappropriata (non pertinente, nudo, \u2026)","mislocated":"La posizione della foto sulla mappa \xe8 sbagliata","copyright":"La foto viola il diritto d\u2019autore","other":"Qualsiasi altro tipo di problema","picture_low_quality":"La foto \xe8 di bassa qualit\xe0","":"Selezione la natura del problema\u2026","blur_missing":"Sono visibili la faccia di una persona o la targa di un\u2019auto","privacy":"Sono visibili un sentiero o una propriet\xe0 privati"},"report_whole_sequence":"Riguarda l\u2019intera sequenza","report_details":"Ulteriori dettagli","report_email":"La tua e-mail","report_email_placeholder":"Facoltativo","report_submit":"Invia","report_wait":"Invio della segnalazione\u2026","report_failure":"\xc8 avvenuto un errore durante la creazione della segnalazione: {e}. Riprovare pi\xf9 tardi.","moveMiddle":"Centra la visuale","show_map":"Mostra la mappa","sequence_next":"Prossima foto nella sequenza","map_theme_age_1":"> 2 anni","map_theme_type":"Tipo di fotocamera","minimize":"Nascondi il widget, puoi mostrarlo di nuovo usando il pulsante nell\u2019angolo in basso a sinistra","metadata_general_license_link":"Vedi la descrizione completa della licenza","share_rss":"Feed RSS","show_psv":"Mostra il visualizzatore delle foto","share_rss_title":"Feed RSS delle nuove sequenze nell\u2019attuale area visibile della mappa","sequence_prev":"Foto precedente della sequenza","sequence_more":"Altre opzioni di riproduzione","josm_live":"Abilita la sincronizzazione automatica di JOSM al caricamento delle foto","metadata_general_seqid":"Sequenza","metadata_camera_focal_length":"Lunghezza focale","filter_user":"Utente","metadata_location_orientation":"Direzione","filter_qualityscore":"Punteggio della qualit\xe0","metadata_quality_help":"Per saperne di pi\xf9 sul punteggio della qualit\xe0","metadata_quality_missing":"Nessun valore impostato nella foto","metadata_exif_value":"Valore","report":"Segnala","report_details_placeholder":"Facoltativo, puoi aggiungere dei dettagli sul problema","report_success":"La segnalazione \xe8 stata inviata correttamente. Non appena possibile verr\xe0 esaminata.","minimize_short":"Nascondi","qualityscore_title":"Informazioni sul punteggio della qualit\xe0","qualityscore_doc_1":"Panoramax propone un Punteggio della qualit\xe0 per ogni foto. Ci\xf2 permette di filtrare facilmente la mappa e mostrare le foto di alta qualit\xe0 disponibili.","qualityscore_doc_2":"Il voto \xe8 mostrato agli utenti con un valore tipo A/B/C/D/E (A \xe8 il voto migliore, E il peggiore) e graficamente viene mostrato con la seguente scala:","qualityscore_doc_link":"Nella nostra documentazione sono presenti maggiori dettagli sul calcolo del Punteggio della qualit\xe0","qualityscore_doc_3":"Esso \xe8 calcolato basandosi sulla precisione del GPS e sulla risoluzione della foto. Un sistema professionale avr\xe0 un punteggio A, un action camera a 360\xb0 avr\xe0 un punteggio B e uno smartphone verr\xe0 classificato come C, D o E.","metadata_general_instance":"Istanza di origine","josm":"JOSM","picture_flat_long":"Foto classica","picture_360_long":"Foto panoramica","metadata_summary":"Sintesi","metadata_general_copy_id":"Copia l\u2019ID","metadata_general_copy_picid":"Copia l\u2019ID della foto","id":"iD","contribute_id":"Contribuisci a OpenStreetMap con l\u2019editor iD","geo_uri":"App esterna","filter_date_6months":"6 mesi","picture_all":"Tutte","metadata_exif_doc":"Doc per gli attributi EXIF","metadata_exif_doc_title":"Vai alla documentazione di Exiv2 per i dettagli completi sulle definizioni degli attributi EXIF e XMP","semantics_value":"Valore","semantics_key_doc":"Per saperne di pi\xf9 su questa chiave","semantics_title":"Etichette","semantics_features":"Oggetti rilevati","semantics_features_none":"Non \xe8 ancora stato rilevato alcun oggetto in questa foto.","semantics_features_default_title":"Oggetto #{nb}","semantics_features_subtitle":"{nb} propriet\xe0 associate","semantics_tags":"{nb} attributi","semantics_show_all_tags":"Mostra tutti gli attributi","semantics_hide_all_tags":"Nascondi tutti gli attributi","semantics_key":"Chiave","semantics_value_doc":"Per saperne di pi\xf9 su questa etichetta","semantics_wikidata_properties":{"P361":"parte di","P31":"instanza di","P279":"sottoclasse di"},"semantics_hide_annotations":"Nascondi le annotazioni della foto","semantics_tags_picture":"Etichette della foto","semantics_show_annotations":"Mostra le annotazioni della foto","semantics_annotation_tooltip":"Clicca per vedere i dettagli","semantics_tags_picture_none":"Non \xe8 stata ancora aggiunta alcuna etichetta su questa foto.","semantics_qualifiers":"Qualificatori","metadata_location_coordinates":"Coordinate (longitudine, latitudine)","metadata_location_copy":"Copia {v}","metadata_location_copy_more":"Ulteriori opzioni per la copia delle coordinate","whats_panoramax":"Panoramax \xe8 la geo-commons per le foto dei territori.","panoramax":"Panoramax","semantics_zero_annotations":"Nessuna annotazione impostata per questa immagine","semantics_hashtags":"Hashtag dell\u2019immagine","semantics_editor_error":"La sintassi non \xe8 valida. Le tue etichette devono avere la seguente forma:\\nchiave=valore\\nprefisso|chiave=valore\\nprefisso|chiave[qualif_chiave=qualif_valore]=valore\\n\\nLa lunghezza massima di una chiave \xe8 di 256 caratteri, quella di un valore \xe8 di 2048 caratteri.","semantics_editor_example":"chiave=valore\\nprefisso|chiave=valore","semantics_edit":"Modifica gli attributi","semantics_save":"Salva le tue modifiche","semantics_undo":"Annulla le tue modifiche","semantics_send_fail":"Non \xe8 stato possibile salvare le tue modifiche, riprova pi\xf9 tardi","semantics_cantsave_invalid":"Impossibile salvare le modifiche, input non valido","semantics_send_ok":"Le tue modifiche sono state inviate con successo","semantics_add_annotation":"Aggiungi una nuova annotazione","semantics_draw_annotation":"Per prima cosa fai clic su un angolo dell\u2019elemento che vorresti rappresentare. Poi fai clic sull\u2019angolo opposto. Per spostarle un angolo fai clic di nuovo su di esso.","semantics_save_drawn_annotation":"Salva posizione","semantics_undo_drawn_annotation":"Annulla","semantics_save_drawn_annotation_incomplete":"Devi disegnare un rettangolo all\u2019interno dell\u2019immagine prima di validarlo","semantics_delete_annotation":"Elimina questa annotazione","semantics_delete_annotation_confirm":"Vuoi veramente eliminare questa annotazione?"},"psv":{"loadError":"Impossibile caricare l\u2019immagine panoramica","ctrlZoom":"Utilizza Ctrl + rotellina del mouse per ingrandire l\u2019immagine","twoFingers":"Usa due dita per spostarti"},"maplibre":{"GeolocateControl.FindMyLocation":"Trova la mia posizione","GeolocateControl.LocationNotAvailable":"Posizione non disponibile"},"map":{"loading":"Caricamento\u2026","thumbnail":"Miniatura della foto passata con il mouse","not_public":"Non pubblicamente visibile","slow_loading":"La mappa impiega troppo tempo a caricarsi e potrebbe apparire a pezzi","map_data":"Dati cartografici: {m}","more_panoramax":"Per saperne di pi\xf9 su Panoramax"}}')},3979:ae=>{"use strict";ae.exports=JSON.parse('{"pnx":{"metadata_general_picid":"\u753b\u50cf\u8b58\u5225\u5b50","loading_labels_fun":["\ud83e\udd8c \u9e7f\u306e\u6a2a\u65ad\u6a19\u8b58\u306e\u691c\u51fa","\ud83d\ude98 Panoramax Car \xa9\u3092\u691c\u7d22","\u2615 \u30ab\u30d5\u30a7\u30a4\u30f3\u306e\u6ce8\u5165","\ud83d\ude00 \u7b11\u3063\u3066\u304f\u3060\u3055\u3044\u3001\u3042\u306a\u305f\u306f\u5730\u56f3\u306b\u8f09\u3063\u3066\u3044\u307e\u3059\uff01","\ud83d\udc08 \u732b\u306e\u5199\u771f\u3092\u5171\u6709\u3059\u308b","\ud83d\ude34 \u5148\u5ef6\u3070\u3057\u3092\u6e1b\u3089\u3059","\ud83e\uded6 \u304a\u8336\u3092\u6df9\u308c\u308b","\ud83d\udc27 \u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3092\u516c\u958b","\ud83d\ude87 \u5730\u4e0b\u9244\u99c5\u306e\u7d22\u5f15","\ud83e\uddf9 \u30e1\u30bf\u30c7\u30fc\u30bf\u306e\u30af\u30ea\u30fc\u30f3\u30a2\u30c3\u30d7","\ud83d\ude92 \u6d88\u9632\u7f72\u306e\u5199\u771f\u3092\u9001\u4fe1","\ud83d\udeb2 \u30b0\u30ea\u30fc\u30f3\u30a6\u30a7\u30a4\u30ba\u306e\u66f4\u65b0","\ud83d\ude89 \u99c5\u306e\u30db\u30fc\u30e0\u306e\u30a6\u30a9\u30fc\u30af\u30b9\u30eb\u30fc","\ud83d\udef0\ufe0f \u885b\u661f\u306e\u63a2\u7d22","\ud83d\udc65 \u30da\u30eb\u30bd\u30ca\u3092\u66f8\u304f","\ud83d\udc1f \u30c1\u30c3\u30d7\u30b7\u30e7\u30c3\u30d7\u306e\u5834\u6240","\ud83e\uddd1\u200d\ud83d\udcbb \u30c7\u30d0\u30c3\u30b0\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9","\ud83d\udcc8 \u7d71\u8a08\u306e\u5897\u52a0"],"share_embed_docs":"\u57cb\u3081\u8fbc\u307f\u8a2d\u5b9a\u306e\u8a73\u7d30\u3092\u8aad\u3080","filter_zoom_in":"\u3053\u306e\u30d5\u30a3\u30eb\u30bf\u30fc\u3092\u8868\u793a\u3059\u308b\u306b\u306f\u62e1\u5927\u3057\u3066\u304f\u3060\u3055\u3044","metadata_camera_type":"\u30bf\u30a4\u30d7","minimize":"\u3053\u306e\u30a6\u30a3\u30b8\u30a7\u30c3\u30c8\u3092\u975e\u8868\u793a\u306b\u3059\u308b\u306b\u306f\u3001\u5de6\u4e0b\u306e\u30dc\u30bf\u30f3\u3092\u4f7f\u7528\u3057\u3066\u518d\u5ea6\u8868\u793a\u3057\u307e\u3059","error_psv":"Photo Sphere Viewer \u304c\u6b63\u3057\u304f\u8aad\u307f\u8fbc\u307e\u308c\u307e\u305b\u3093\u3067\u3057\u305f","error_josm":"JOSM \u304c\u5fdc\u7b54\u3057\u307e\u305b\u3093\u3002\u5b9f\u884c\u3055\u308c\u3066\u3044\u3066\u3001\u30ea\u30e2\u30fc\u30c8\u304c\u6709\u52b9\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u304b?","filter_user":"\u30e6\u30fc\u30b6\u30fc","qualityscore_doc_3":"\u3053\u308c\u306f GPS \u306e\u7cbe\u5ea6\u3068\u753b\u50cf\u306e\u89e3\u50cf\u5ea6\u306b\u57fa\u3065\u3044\u3066\u8a08\u7b97\u3055\u308c\u307e\u3059\u3002\u30d7\u30ed\u4ed5\u69d8\u306e\u30b7\u30b9\u30c6\u30e0\u306f A \u8a55\u4fa1\u3001360\xb0 \u30a2\u30af\u30b7\u30e7\u30f3 \u30ab\u30e1\u30e9\u306f B \u8a55\u4fa1\u3001\u30b9\u30de\u30fc\u30c8\u30d5\u30a9\u30f3\u306f C/D/E \u8a55\u4fa1\u306b\u306a\u308a\u307e\u3059\u3002","report_nature":{"inappropriate":"\u5199\u771f\u304c\u4e0d\u9069\u5207\u3067\u3059\uff08\u7121\u95a2\u4fc2\u3001\u30cc\u30fc\u30c9\u306a\u3069\uff09","":"\u554f\u984c\u306e\u6027\u8cea\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u2026","blur_missing":"\u4eba\u306e\u9854\u3084\u8eca\u306e\u30ca\u30f3\u30d0\u30fc\u30d7\u30ec\u30fc\u30c8\u304c\u898b\u3048\u308b","blur_excess":"\u307c\u304b\u3059\u5fc5\u8981\u306e\u306a\u3044\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u304c\u307c\u3084\u3051\u3066\u3044\u308b","privacy":"\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30d1\u30b9\u307e\u305f\u306f\u30d7\u30ed\u30d1\u30c6\u30a3\u304c\u8868\u793a\u3055\u308c\u307e\u3059","picture_low_quality":"\u753b\u50cf\u306e\u54c1\u8cea\u304c\u60aa\u3044","mislocated":"\u5730\u56f3\u4e0a\u306e\u5199\u771f\u306e\u4f4d\u7f6e\u304c\u9069\u5207\u3067\u306f\u3042\u308a\u307e\u305b\u3093","copyright":"\u753b\u50cf\u306f\u8457\u4f5c\u6a29\u3092\u4fb5\u5bb3\u3057\u3066\u3044\u307e\u3059","other":"\u305d\u306e\u4ed6\u306e\u554f\u984c"},"sequence_next":"\u6b21\u306e\u753b\u50cf","sequence_play":"\u3053\u306e\u30b7\u30fc\u30b1\u30f3\u30b9\u306b\u6cbf\u3063\u3066\u30d7\u30ec\u30a4\u3057\u3066\u304f\u3060\u3055\u3044","sequence_pause":"\u4e00\u6642\u505c\u6b62\u30b7\u30fc\u30b1\u30f3\u30b9","sequence_prev":"\u524d\u306e\u753b\u50cf","sequence_more":"\u3088\u308a\u591a\u304f\u306e\u30d7\u30ec\u30a4\u30aa\u30d7\u30b7\u30e7\u30f3","sequence_speed":"\u30d7\u30ec\u30a4\u30e4\u30fc\u306e\u30b9\u30d4\u30fc\u30c9","legend_license":"\u30e9\u30a4\u30bb\u30f3\u30b9: {l}","legend_title":"\u5199\u771f\u306e\u8a73\u7d30\u3092\u8868\u793a","edit_osm":"OSM\u306b\u8ca2\u732e\u3059\u308b","josm_live":"\u753b\u50cf\u8aad\u307f\u8fbc\u307f\u6642\u306bJOSM\u81ea\u52d5\u540c\u671f\u3092\u6709\u52b9\u306b\u3059\u308b","loading_labels_serious":["\ud83d\uddfa\ufe0f \u30de\u30c3\u30d7\u30c7\u30fc\u30bf\u306e\u8aad\u307f\u8fbc\u307f","\ud83d\udda5\ufe0f \u30af\u30a8\u30eaAPI","\ud83d\uddbc\ufe0f \u30b5\u30e0\u30cd\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3093\u3067\u3044\u307e\u3059","\ud83d\udd0d EXIF\u30e1\u30bf\u30c7\u30fc\u30bf\u306e\u5206\u6790","\ud83c\udfd8\ufe0f 3D\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0","\ud83d\udcf7 360\xb0\u5199\u771f\u3092\u521d\u671f\u5316\u3057\u3066\u3044\u307e\u3059","\ud83d\udfe0 \u8272\u306e\u30d0\u30e9\u30f3\u30b9","\ud83d\udcaf \u30b3\u30f3\u30d4\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u54c1\u8cea\u30b9\u30b3\u30a2 \xa9"],"error_pic":"\u8981\u6c42\u3055\u308c\u305f\u5199\u771f\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f","error_nopic":"\u6307\u5b9a\u3055\u308c\u305f\u4f4d\u7f6e\u306b\u306f\u753b\u50cf\u304c\u3042\u308a\u307e\u305b\u3093","error_api":"\u5199\u771f\u30b5\u30fc\u30d0\u30fc\u304c\u5229\u7528\u3067\u304d\u307e\u305b\u3093","error_webgl":"WebGL\u306f\u30d6\u30e9\u30a6\u30b6\u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093","error_api_compatibility":"\u753b\u50cf\u30b5\u30fc\u30d0\u30fc\u306f\u3053\u306e\u30d3\u30e5\u30fc\u30a2\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3068\u4e92\u63db\u6027\u304c\u3042\u308a\u307e\u305b\u3093","filter_date":"\u65e5\u4ed8","filter_date_1month":"1\u30f6\u6708","filter_date_1year":"1\u5e74","filter_user_mypics":"\u79c1\u306e\u5199\u771f","filter_picture":"\u753b\u50cf\u30bf\u30a4\u30d7","picture_flat":"\u30af\u30e9\u30b7\u30c3\u30af","picture_360":"360\xb0","filter_qualityscore":"\u54c1\u8cea\u30b9\u30b3\u30a2","filter_qualityscore_help":"\u30af\u30ea\u30c3\u30af\u3057\u3066\u6709\u52b9\u307e\u305f\u306f\u7121\u52b9\u306b\u3057\u307e\u3059","qualityscore_title":"\u54c1\u8cea\u30b9\u30b3\u30a2\u306b\u3064\u3044\u3066","qualityscore_doc_1":"Panoramax \u306f\u3001\u5404\u5199\u771f\u306b\u54c1\u8cea\u30b9\u30b3\u30a2\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u5730\u56f3\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u304c\u7c21\u5358\u306b\u306a\u308a\u3001\u9ad8\u54c1\u8cea\u306e\u5199\u771f\u306e\u53ef\u7528\u6027\u3092\u5305\u62ec\u7684\u306b\u8868\u793a\u3067\u304d\u307e\u3059\u3002","qualityscore_doc_2":"\u8a55\u4fa1\u306f A/B/C/D/E \u30b9\u30b3\u30a2 (A \u304c\u6700\u9ad8\u3001E \u304c\u6700\u4f4e) \u3068\u3057\u3066\u30e6\u30fc\u30b6\u30fc\u306b\u8868\u793a\u3055\u308c\u3001\u6b21\u306e\u30b9\u30b1\u30fc\u30eb\u3067\u30b0\u30e9\u30d5\u8868\u793a\u3055\u308c\u307e\u3059\u3002","qualityscore_doc_link":"\u54c1\u8cea\u30b9\u30b3\u30a2\u306e\u8a08\u7b97\u306e\u8a73\u7d30\u306b\u3064\u3044\u3066\u306f\u3001\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002","map_background":"\u5730\u56f3\u306e\u80cc\u666f","map_background_aerial":"\u822a\u7a7a\u5199\u771f","map_background_streets":"\u901a\u308a","map_theme":"\u30de\u30c3\u30d7\u30c6\u30fc\u30de","map_theme_default":"\u30af\u30e9\u30b7\u30c3\u30af","map_theme_age":"\u64ae\u5f71\u65e5","map_theme_age_1":"2\u6b73\u4ee5\u4e0a","map_theme_age_2":"2\u6b73\u672a\u6e80","map_theme_age_3":"1\u6b73\u672a\u6e80","map_theme_age_4":"1\u304b\u6708\u672a\u6e80","map_theme_type":"\u30ab\u30e1\u30e9\u30bf\u30a4\u30d7","map_theme_score":"\u54c1\u8cea\u30b9\u30b3\u30a2","contrast":"\u3088\u308a\u9ad8\u3044\u753b\u50cf\u30b3\u30f3\u30c8\u30e9\u30b9\u30c8\u3092\u6709\u52b9\u306b\u3059\u308b","metadata":"\u753b\u50cf\u30e1\u30bf\u30c7\u30fc\u30bf","metadata_general_seqid":"\u30b7\u30fc\u30b1\u30f3\u30b9\u8b58\u5225\u5b50","metadata_general_picid_link":"\u753b\u50cf\u306eJSON\u8aac\u660e\u3078\u79fb\u52d5","metadata_general_seqid_link":"\u30b7\u30fc\u30b1\u30f3\u30b9\u306eJSON\u8a18\u8ff0\u3078\u79fb\u52d5","metadata_general_author":"\u8457\u8005","metadata_general_license":"\u30e9\u30a4\u30bb\u30f3\u30b9","metadata_general_license_link":"\u30e9\u30a4\u30bb\u30f3\u30b9\u306e\u5b8c\u5168\u306a\u8aac\u660e\u3092\u898b\u308b","metadata_general_date":"\u64ae\u5f71\u65e5","metadata_camera":"\u30ab\u30e1\u30e9","metadata_camera_make":"\u30e1\u30fc\u30ab\u30fc","metadata_camera_model":"\u30e2\u30c7\u30eb","metadata_camera_resolution":"\u89e3\u50cf\u5ea6","metadata_camera_focal_length":"\u7126\u70b9\u8ddd\u96e2","metadata_location":"\u4f4d\u7f6e","metadata_location_longitude":"\u7d4c\u5ea6","metadata_location_latitude":"\u7def\u5ea6","metadata_location_orientation":"\u64ae\u5f71\u65b9\u5411","metadata_location_precision":"\u4f4d\u7f6e\u6c7a\u3081\u7cbe\u5ea6","metadata_quality":"\u54c1\u8cea\u30b9\u30b3\u30a2","metadata_quality_help":"\u54c1\u8cea\u30b9\u30b3\u30a2\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u77e5\u308b","metadata_quality_score":"\u30b0\u30ed\u30fc\u30d0\u30eb\u30b9\u30b3\u30a2","metadata_quality_gps_score":"\u30dd\u30b8\u30b7\u30e7\u30cb\u30f3\u30b0\u30b9\u30b3\u30a2","metadata_quality_resolution_score":"\u89e3\u6c7a\u30b9\u30b3\u30a2","metadata_quality_missing":"\u753b\u50cf\u306b\u5024\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093","metadata_exif":"EXIF / XMP","metadata_exif_name":"\u30bf\u30b0","metadata_exif_value":"\u4fa1\u5024","report":"\u5199\u771f\u3092\u5831\u544a\u3059\u308b","report_auth":"\u3053\u306e\u30ec\u30dd\u30fc\u30c8\u306f\u3042\u306a\u305f\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u300c{a}\u300d\u3092\u4f7f\u7528\u3057\u3066\u9001\u4fe1\u3055\u308c\u307e\u3059","report_nature_label":"\u554f\u984c\u306e\u6027\u8cea","report_whole_sequence":"\u3053\u308c\u306f\u30b7\u30fc\u30b1\u30f3\u30b9\u5168\u4f53\u306b\u95a2\u4fc2\u3059\u308b","report_details":"\u8ffd\u52a0\u306e\u8a73\u7d30","report_details_placeholder":"\u30aa\u30d7\u30b7\u30e7\u30f3\u3068\u3057\u3066\u3001\u554f\u984c\u306e\u8a73\u7d30\u3068\u305d\u308c\u304c\u3069\u306e\u3088\u3046\u306b\u95a2\u4fc2\u3057\u3066\u3044\u308b\u304b\u3092\u8ffd\u52a0\u3067\u304d\u307e\u3059","report_email":"\u3042\u306a\u305f\u306e\u30e1\u30fc\u30eb","report_email_placeholder":"\u30aa\u30d7\u30b7\u30e7\u30f3","report_submit":"\u9001\u4fe1","report_wait":"\u30ec\u30dd\u30fc\u30c8\u3092\u9001\u4fe1\u3057\u3066\u3044\u307e\u3059\u2026","report_success":"\u30ec\u30dd\u30fc\u30c8\u306f\u6b63\u5e38\u306b\u9001\u4fe1\u3055\u308c\u307e\u3057\u305f\u3002\u3067\u304d\u308b\u3060\u3051\u65e9\u304f\u78ba\u8a8d\u3055\u308c\u307e\u3059\u3002","report_failure":"\u30ec\u30dd\u30fc\u30c8\u306e\u4f5c\u6210\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {e}\u3002\u3057\u3070\u3089\u304f\u3057\u3066\u304b\u3089\u3082\u3046\u4e00\u5ea6\u304a\u8a66\u3057\u304f\u3060\u3055\u3044\u3002","zoom":"\u30ba\u30fc\u30e0","zoomOut":"\u30ba\u30fc\u30e0\u30a2\u30a6\u30c8","zoomIn":"\u30ba\u30fc\u30e0\u30a4\u30f3","moveUp":"\u4e0a\u306b\u79fb\u52d5","moveDown":"\u4e0b\u306b\u79fb\u52d5","moveLeft":"\u5de6\u306b\u79fb\u52d5","moveRight":"\u53f3\u306b\u79fb\u52d5","moveMiddle":"\u30d3\u30e5\u30fc\u3092\u4e2d\u592e\u306b\u914d\u7f6e\u3059\u308b","expand":"\u62e1\u5927\u3059\u308b","expand_info":"\u30a6\u30a3\u30b8\u30a7\u30c3\u30c8\u3092\u5168\u30da\u30fc\u30b8\u306b\u8868\u793a\u3059\u308b","show_psv":"\u753b\u50cf\u30d3\u30e5\u30fc\u30a2\u3092\u8868\u793a\u3059\u308b","show_map":"\u5730\u56f3\u3092\u8868\u793a","minimize_short":"\u96a0\u308c\u308b","options":"\u30aa\u30d7\u30b7\u30e7\u30f3","filters":"\u30d5\u30a3\u30eb\u30bf\u30fc","layers":"\u30ec\u30a4\u30e4\u30fc","search":"\u691c\u7d22","search_empty":"\u7d50\u679c\u306a\u3057","search_address":"\u4f4f\u6240\u3001\u5e02\u533a\u753a\u6751\u306a\u3069\u3092\u691c\u7d22","search_user":"\u30e6\u30fc\u30b6\u30fc\u540d\u3092\u691c\u7d22\u2026","share":"\u5171\u6709","share_links":"\u30ea\u30f3\u30af","share_page":"\u3053\u306e\u30da\u30fc\u30b8\u3078\u306e\u30ea\u30f3\u30af","share_image":"HD\u753b\u50cf","share_rss":"RSS\u30d5\u30a3\u30fc\u30c9","share_rss_title":"\u73fe\u5728\u8868\u793a\u3055\u308c\u3066\u3044\u308b\u30de\u30c3\u30d7\u30a8\u30ea\u30a2\u5185\u306e\u65b0\u3057\u3044\u30b7\u30fc\u30b1\u30f3\u30b9\u306e RSS \u30d5\u30a3\u30fc\u30c9","share_embed":"\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u306b\u57cb\u3081\u8fbc\u3080","share_print":"\u5370\u5237","copy":"\u30b3\u30d4\u30fc","copied":"\u30b3\u30d4\u30fc\u3057\u307e\u3057\u305f","error":"\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u2026","error_click":"\u7d9a\u304f","error_retry":"\u5f8c\u3067\u3082\u3046\u4e00\u5ea6\u304a\u8a66\u3057\u304f\u3060\u3055\u3044"},"map":{"loading":"\u8aad\u307f\u8fbc\u307f\u4e2d\u2026","thumbnail":"\u30db\u30d0\u30fc\u3057\u305f\u753b\u50cf\u306e\u30b5\u30e0\u30cd\u30a4\u30eb","not_public":"\u516c\u958b\u3055\u308c\u306a\u3044","slow_loading":"\u30de\u30c3\u30d7\u306e\u8aad\u307f\u8fbc\u307f\u304c\u9045\u304f\u3001\u58ca\u308c\u3066\u3044\u308b\u3088\u3046\u306b\u898b\u3048\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059"},"psv":{"twoFingers":"2\u672c\u306e\u6307\u3067\u79fb\u52d5\u3057\u307e\u3059","ctrlZoom":"Ctrl + \u30b9\u30af\u30ed\u30fc\u30eb\u3067\u753b\u50cf\u3092\u62e1\u5927\u3057\u307e\u3059","loadError":"\u753b\u50cf\u3092\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093"},"maplibre":{"GeolocateControl.FindMyLocation":"\u81ea\u5206\u306e\u4f4d\u7f6e\u3092\u8868\u793a","GeolocateControl.LocationNotAvailable":"GPS\u306f\u5229\u7528\u3067\u304d\u307e\u305b\u3093"}}')},6920:ae=>{"use strict";ae.exports=JSON.parse('{"pnx":{"zoomIn":"Zoom in","zoom":"Zoom","zoomOut":"Zoom uit","moveDown":"Naar beneden","search_user":"Zoek een gebruikersnaam\u2026","moveUp":"Ga omhoog","share_rss":"RSS-feed","loading_labels_serious":["\ud83d\uddfa\ufe0f Kaart aan het laden","\ud83d\udda5\ufe0f API opvragen","\ud83d\uddbc\ufe0f Miniatuurweergaven laden","\ud83d\udd0d EXIF metadata analyseren","\ud83c\udfd8\ufe0f 3D-rendering","\ud83d\udcf7 360\xb0 afbeelden initialiseren","\ud83d\udfe0 Kleur balancering","\ud83d\udcaf Bereken kwaliteits-score \xa9","\ud83d\udce1 Updates downloaden","\ud83c\udf0d Kaarttegels ophalen","\ud83d\udcf8 Schaduwen verwerken"],"share_embed_docs":"Lees meer over embedded instellingen","sequence_pause":"Pauzeer sequentie","sequence_prev":"Vorige afbeelding uit de sequentie","id":"iD","josm":"JOSM","sequence_more":"Meer afspeelmogelijkheden","sequence_speed":"Afspeel snelheid","edit_osm":"OSM aanpassen","moveLeft":"Naar links","moveRight":"Naar rechts","moveMiddle":"Middelpunt","expand":"Vergroot","show_psv":"Toon de afbeeldingsviewer","show_map":"Toon de kaart","options":"Opties","filters":"Filters","layers":"Lagen","search":"Zoek","search_empty":"Geen resultaat gevonden","search_address":"Zoek een adres, stad\u2026","share":"Deel","share_links":"Links","share_page":"Link naar deze foto","share_image":"HD afbeelding","share_embed":"Embedden op uw website","share_print":"Afdrukken","copy":"Kopieer","copied":"Gekopieerd","error":"We hebben een probleem\u2026","sequence_next":"Volgende afbeelding van de sequentie","error_click":"Klik om verder te gaan","error_retry":"Probeer later opnieuw","legend_license":"Licentie: {l}","legend_title":"Toon gegevens van de afbeelding","sequence_play":"Speel deze sequentie af","expand_info":"De widget op de volledige pagina weergeven","minimize":"Verberg deze widget, je kan hem terug tonen met de knop linksonder","loading_labels_fun":["\ud83e\udd8c Detectie verkeersborden overstekende herten","\ud83d\ude98 Panoramax auto zoeken \xa9","\u2615 Cafe\xefne-injectie","\ud83d\ude00 Gelukt, je kaart is gekaart!","\ud83d\udc08 Foto\'s delen van katten","\ud83d\ude34 Uitstelgedrag verminderen","\ud83e\uded6 Thee zetten","\ud83d\udc27 Broncode openen","\ud83d\ude87 Indexering metrostations","\ud83e\uddf9 Metadata opschonen","\ud83d\ude92 Foto\'s van brandweerkazernes versturen","\ud83d\udeb2 Fiets- en wandelpaden bijwerken","\ud83d\ude89 Perron doorgang","\ud83d\udef0\ufe0f Satellieten zoeken","\ud83d\udc65 Personas opslaan","\ud83e\udd5e Pannenkoekenhuizen localiseren","\ud83e\uddd1\u200d\ud83d\udcbb Interface debuggen","\ud83d\udcc8 Statistieken verhogen","\ud83e\udd16 Semantiek aanleren","\ud83c\udfa8 Interface herontwerpen","\ud83d\udcc5 Fotomappingparty\'s plannen","\ud83e\uddc0 Kazen laten rijpen","\ud83c\udf04 Prachtige zonneschijn berekenen","\ud83c\udf0a Meten van het hoogwater"],"share_rss_title":"RSS-feed van nieuwe reeksen in het nu zichtbare kaartgebied","josm_live":"Schakel JOSM automatische synchronisatie in bij het laden van afbeeldingen","minimize_short":"Verbergen","error_psv":"Photo Sphere Viewer werd niet correct geladen","error_nopic":"Geen foto beschikbaar op de aangegeven locatie","error_api":"De fotoserver is niet beschikbaar","error_webgl":"WebGL wordt niet ondersteund door je browser","error_api_compatibility":"De fotoserver is niet compatibel met deze viewer","filter_date_1month":"1 maand","filter_date_1year":"1 jaar","filter_user":"Gebruiker","filter_user_mypics":"Mijn foto\'s","filter_picture":"Afbeeldingstype","picture_flat":"Klassiek","picture_360":"360\xb0","filter_qualityscore":"Kwaliteitsscore","qualityscore_doc_2":"De score wordt getoond als een letter A/B/C/D/E (waarbij A het beste is en E het slechtse), en wordt grafisch weergegeven volgens deze schaal:","qualityscore_doc_link":"Meer weten over de Kwaliteitsscore","map_background":"Kaartachtergrond","map_background_aerial":"Satelliet","map_background_streets":"Straten","map_theme":"Kaartthema","map_theme_default":"Klassiek","map_theme_age":"Opnamedatum","map_theme_age_3":"< 1 jaar","map_theme_age_4":"< 1 maand","filter_qualityscore_help":"Klik om aan- of uit te schakelen","report_failure":"Er is een fout opgetreden bij het aanmaken van het rapport: {e}. Probleem later opnieuw.","map_theme_score":"Kwaliteitsscore","contrast":"Afbeeldingscontrast verhogen","metadata":"Metadata van de foto","metadata_camera_make":"Fabrikant","filter_date":"Datum","filter_zoom_in":"Zoom in om dit filter te zien","metadata_general_license_link":"De volledige beschrijving van de licentie bekijken","metadata_general_seqid":"Serie","metadata_general_picid_link":"Ga naar de JSON-beschrijving van de foto","metadata_general_seqid_link":"Ga naar de JSON-beschrijving van de sequentie","metadata_general_author":"Auteur","error_josm":"JOSM antwoord niet, is het actief en is afstandsbediening ingeschakeld?","qualityscore_title":"Over de kwaliteitsscore","metadata_general_license":"Licentie","error_pic":"The gevraagde foto werd niet gevonden","map_theme_age_2":"< 2 jaar","metadata_general_picid":"Afbeelding","metadata_general_date":"Opnamedatum","map_theme_type":"Cameratype","qualityscore_doc_1":"Panoramax toont een Kwaliteitsscore voor elke foto. Dit vergemakkelijkt filtering en laat toe om foto\'s van hoge kwaliteit te vinden.","qualityscore_doc_3":"Hij wordt berekend op basis van de GPS-nauwkeurigheid en resolutie van de foto. Een professioneel systeem zal een A-score hebben, een 360\xb0 actiecamera een B-score, en een smartphone een C/D/E-score.","map_theme_age_1":"> 2 jaar","report_details_placeholder":"Je kan, optioneel, details over het probleem toevoegen","metadata_camera":"Apparaat","metadata_camera_model":"Model","metadata_camera_type":"Type","metadata_camera_resolution":"Resolutie","metadata_camera_focal_length":"Brandpuntsafstand","metadata_location":"Positie","metadata_location_longitude":"Longitude","metadata_location_latitude":"Latitude","metadata_location_orientation":"Richting","metadata_location_precision":"Nauwkeurigheid van de positionering","metadata_quality":"Kwaliteit","metadata_quality_help":"Meer weten over de Kwaliteitsscore","metadata_quality_score":"Globale score","metadata_quality_gps_score":"Positioneringsscore","metadata_quality_resolution_score":"Resolutiescore","metadata_quality_missing":"geen info in de afbeelding","metadata_exif":"EXIF","metadata_exif_name":"Tag","metadata_exif_value":"Waarde","report":"Rapporteer","report_auth":"Dit rapport zal worden verstuurd met je account \\"{a}\\"","report_nature_label":"Oorzaak van het probleem","report_nature":{"":"Selecteer de aard van het probleem \u2026","blur_missing":"Het gezicht van een persoon of een nummerplaat is zichtbaar","blur_excess":"Een overbodige vervaging werd toegepast op een object","inappropriate":"De foto is ongepast (ongerelateerd, naaktheid \u2026)","privacy":"Een private weg of een privaat eigendom is zichtbaar","picture_low_quality":"De foto is van lage kwaliteit","mislocated":"De foto is slecht gepositioneerd","copyright":"De foto schendt het auteursrecht","other":"Een ander soort probleem"},"report_whole_sequence":"Dit betreft de volledige sequentie","report_details":"Aanvullende details","report_email":"Je e-mail","report_email_placeholder":"Optioneel","report_submit":"Verzenden","report_wait":"Rapport verzenden \u2026","report_success":"Het rapport werd succesvol verzonden. Het zal zo snel mogelijk behandeld worden.","whats_panoramax":"Panoramax is de geo-commons voor foto\'s van gebieden.","contribute_id":"Bijdragen aan OpenStreetMap met de iD-editor","geo_uri":"Externe app","semantics_hide_all_tags":"Verberg alle tags","semantics_key":"Sleutel","semantics_value":"Waarde","semantics_key_doc":"Meer weten over deze sleutel","semantics_value_doc":"Meer weten over deze tag","semantics_title":"Tags","semantics_tags":"{nb} tags","semantics_features":"Gedetecteerde eigenschappen","semantics_features_none":"Er is nog geen eigenschap gedetecteerd of geannoteerd in deze afbeelding.","semantics_features_default_title":"Eigenschap #{nb}","semantics_features_subtitle":"{nb} geassocieerde eigenschappen","semantics_show_all_tags":"Toon alle tags","metadata_general_instance":"Bron instance","semantics_annotation_tooltip":"Klik om details te zien","semantics_tags_picture":"Afbeelding tags","semantics_tags_picture_none":"Er zijn nog geen tags ingesteld voor deze afbeelding.","semantics_qualifiers":"Kwalificaties","semantics_show_annotations":"afbeelding-aantekeningen weergeven","semantics_hide_annotations":"afbeelding-aantekeningen verbergen","semantics_wikidata_properties":{"P31":"Instance van","P279":"subklasse van","P361":"onderdeel van"},"metadata_exif_doc":"Documenten voor EXIF-tags","metadata_exif_doc_title":"Ga naar documentatie van Exiv2 voor volledige informatie over definities van EXIF- en XMP-tags","metadata_location_copy":"Kopieer {v}","metadata_location_copy_more":"Meer kopieeropties voor co\xf6rdinaten","metadata_general_copy_picid":"Kopieer afbeelding ID","filter_date_6months":"6 maanden","picture_360_long":"Panorama afbeelding","metadata_summary":"Samenvatting","metadata_general_copy_id":"Kopieer ID","picture_flat_long":"Klassieke afbeelding","metadata_location_coordinates":"Co\xf6rdinaten (lengtegraad, breedtegraad)","picture_all":"Alles","semantics_zero_annotations":"Geen aantekeningen bij deze afbeelding","semantics_hashtags":"Foto-hashtags","panoramax":"Panoramax","semantics_editor_error":"De syntax is ongeldig. Je tags moeten eruit zien als:\\nsleutel=waarde\\nprefix|sleutel=waarde\\nprefix|sleutel[qualif_sleutel=qualif_waarde]=waarde\\n\\nMaximale lengte van de sleutel: 256 karakters, maximale lengte van de waarde: 2048 karakters.","semantics_save":"Je wijzigingen opslaan","semantics_editor_example":"sleutel=waarde\\nprefix|sleutel=waarde","semantics_edit":"De attributen bewerken","semantics_undo":"Je bewerkingen annuleren","semantics_send_ok":"Je bewerkingen werden succesvol verzonden","semantics_cantsave_invalid":"Kan wijzigingen niet opslaan, input is ongeldig","semantics_send_fail":"Wijzigingen opslaan mislukt, probeer later opnieuw","semantics_save_drawn_annotation":"Bewaar positie","semantics_undo_drawn_annotation":"Annuleer","semantics_save_drawn_annotation_incomplete":"Er moet een rechthoek getekend worden die op de afbeelding past voor validatie mogelijk is","semantics_delete_annotation":"verwijder deze aantekening","semantics_delete_annotation_confirm":"Wil je deze aantekening echt verwijderen ?","semantics_add_annotation":"Voeg aantekening toe","semantics_draw_annotation":"Klik eerst op de hoek van het element dat je wilt weergeven. Klik vervolgens op de tegenoverliggende hoek. Je kunt nogmaals op een hoek klikken om deze te verplaatsen."},"psv":{"twoFingers":"Gebruik twee vingers om te navigeren","ctrlZoom":"Gebruik ctrl + scroll om de afbeelding in en uit te zoomen","loadError":"Het panorama kan niet worden geupload"},"maplibre":{"GeolocateControl.FindMyLocation":"Mijn locatie zoeken","GeolocateControl.LocationNotAvailable":"Locatitie niet beschikbaar"},"map":{"loading":"Laden \u2026","slow_loading":"De kaart laadt traag en kan er gebroken uitzien","thumbnail":"Thumbnail van de aangeduide foto","not_public":"Niet openbaar zichtbaar","map_data":"Kaartdata: {m}","more_panoramax":"Meer weten over Panoramax"}}')},9026:ae=>{"use strict";ae.exports=JSON.parse('{"pnx":{"moveRight":"Przesu\u0144 w prawo","sequence_speed":"Pr\u0119dko\u015b\u0107 odtwarzania","metadata_camera_model":"Model","search_address":"Szukaj adres, miasto\u2026","zoom":"Przybli\u017cenie","zoomIn":"Przybli\u017c","moveUp":"Przesu\u0144 w g\xf3r\u0119","moveDown":"Przesu\u0144 w d\xf3\u0142","moveLeft":"Przesu\u0144 w lewo","moveMiddle":"Wycentruj widok","expand":"Rozszerz","show_psv":"Poka\u017c przegl\u0105dark\u0119 zdj\u0119\u0107","show_map":"Poka\u017c map\u0119","options":"Opcje","filters":"Filtry","layers":"Warstwy","search":"Szukaj","search_empty":"Brak wynik\xf3w","search_user":"Szukaj nazwy u\u017cytkownika\u2026","share":"Udost\u0119pnij","share_links":"Linki","share_page":"Link do tej strony","share_rss":"Kana\u0142 RSS","share_print":"Drukuj","copy":"Kopiuj","copied":"Skopiowano","error":"Mamy problem\u2026","error_click":"Kliknij, aby kontynuowa\u0107","error_retry":"Prosz\u0119 spr\xf3buj p\xf3\u017aniej","sequence_next":"Nast\u0119pne zdj\u0119cie w sekwencji","sequence_pause":"Spauzuj sekwencj\u0119","sequence_prev":"Poprzednie zdj\u0119cie w sekwencji","sequence_more":"Wi\u0119cej opcji odtwarzania","legend_license":"Licencja: {l}","legend_title":"Poka\u017c szczeg\xf3\u0142y zdj\u0119cia","edit_osm":"Edytuj OSM","loading_labels_serious":["\ud83d\uddfa\ufe0f Wczytywanie danych mapy","\ud83d\udda5\ufe0f Odpytywanie API","\ud83d\uddbc\ufe0f Wczytywanie miniaturek","\ud83d\udd0d Analizowanie metadanych EXIF","\ud83c\udfd8\ufe0f Renderowanie 3D","\ud83d\udcf7 Inicjowanie zdj\u0119\u0107 360\xb0","\ud83d\udfe0 Balansowanie kolor\xf3w","\ud83d\udcaf Obliczanie oceny jako\u015bci \xa9"],"map_theme_age_2":"< 2 lata","map_theme_age_1":"> 2 lata","map_theme_age":"Data zrobienia","filter_picture":"Typ zdj\u0119cia","map_theme_age_3":"< rok","map_theme_age_4":"< miesi\u0105c","map_theme_type":"Typ aparatu","metadata":"Metadane zdj\u0119cia","metadata_general_picid":"Identyfikator zdj\u0119cia","metadata_general_seqid":"Identyfikator sekwencji","metadata_general_license":"Licencja","metadata_general_author":"Autor","metadata_camera":"Aparat","metadata_camera_type":"Typ","metadata_camera_resolution":"Rozdzielczo\u015b\u0107","metadata_location":"Lokalizacja","metadata_exif":"EXIF / XMP","metadata_quality_missing":"Brak warto\u015bci ustawionej w zdj\u0119ciu","metadata_exif_name":"Tag","metadata_exif_value":"Warto\u015b\u0107","report":"Zg\u0142o\u015b zdj\u0119cie","report_nature":{"privacy":"Prywatna droga lub w\u0142asno\u015b\u0107 widoczna","mislocated":"Zdj\u0119cie jest w z\u0142ym miejscu na mapie","copyright":"Zdj\u0119cie narusza prawa autorskie","picture_low_quality":"Zdj\u0119cie jest bardzo niskiej jako\u015bci","other":"Inny problem","":"Wybierz typ problemu\u2026","blur_missing":"Twarz osoby lub rejestracja samochodu jest widoczna","blur_excess":"Obiekt, kt\xf3ry nie wymaga zamazania jest zamazany","inappropriate":"Zdj\u0119cie jest niestosowne (niezwi\u0105zane, nago\u015b\u0107\u2026)"},"zoomOut":"Oddal","report_whole_sequence":"Dotyczy ca\u0142ej sekwencji","report_details":"Dodatkowe szczeg\xf3\u0142y","report_email":"Tw\xf3j adres email","report_email_placeholder":"Opcjonalne","report_submit":"Wy\u015blij","report_wait":"Wysy\u0142anie zg\u0142oszenia\u2026","report_success":"Zg\u0142oszenie zosta\u0142o wys\u0142ane. Zostanie przejrzane tak szybko jak to mo\u017cliwe.","share_rss_title":"Kana\u0142 RSS nowych sekwencji na widocznym obszarze mapy","loading_labels_fun":["\ud83e\udd8c Wykrywanie znak\xf3w przechodzenia jeleni",null,"\u2615 Wstrzykiwanie kofeiny","\ud83d\ude00 U\u015bmiechnij si\u0119, jeste\u015b mapowany!","\ud83d\udc08 Udost\u0119pnianie zdj\u0119\u0107 kot\xf3w","\ud83d\ude34 Zmniejszania prokrastynacji","\ud83e\uded6 Parzenie herbaty","\ud83d\udc27 Otwieranie kodu \u017ar\xf3d\u0142owego","\ud83d\ude87 Indeksowanie stacji metra","\ud83e\uddf9 Czyszczenie metadanych","\ud83d\ude92 Przesy\u0142anie zdj\u0119\u0107 remiz",null,"\ud83d\ude89 Przechodzenie peron\xf3w stacji","\ud83d\udef0\ufe0f Wyszukiwanie satelit",null,"\ud83d\udc1f Szukanie sklep\xf3w z frytkami i ryb\u0105","\ud83e\uddd1\u200d\ud83d\udcbb Interfejs debugowania","\ud83d\udcc8 Zwi\u0119kszanie statystyk"],"share_embed_docs":"Przeczytaj wi\u0119cej o konfiguracji osadzenia","sequence_play":"Odtw\xf3rz t\u0119 sekwencj\u0119","josm_live":"W\u0142\u0105cz automatyczn\u0105 synchronizacj\u0119 JOSM przy \u0142adowaniu zdj\u0119\u0107","error_api":"Serwer zdj\u0119\u0107 nie jest dost\u0119pny","error_webgl":"WebGL nie jest obs\u0142ugiwany przez t\u0119 przegl\u0105dark\u0119","error_api_compatibility":"Serwer zdj\u0119\u0107 nie jest kompatybilny z t\u0105 wersj\u0105 przegl\u0105darki","filter_date":"Data","filter_date_1month":"1 miesi\u0105c","filter_date_1year":"1 rok","filter_user":"U\u017cytkownik","filter_user_mypics":"Moje zdj\u0119cia","filter_zoom_in":"Przybli\u017c, aby filtry by\u0142y widoczne","picture_flat":"Klasyczne","picture_360":"360\xb0","filter_qualityscore":"Ocena jako\u015bci","map_background":"Podk\u0142ad mapowy","map_background_aerial":"Zdj\u0119cia lotnicze","map_background_streets":"Ulice","map_theme":"Motyw mapy","map_theme_default":"Klasyczny","map_theme_score":"Ocena jako\u015bci","contrast":"W\u0142\u0105cz wy\u017cszy kontrast zdj\u0119cia","metadata_general_picid_link":"Id\u017a do opisu zdj\u0119cia w JSON","metadata_general_seqid_link":"Id\u017a do opisu sekwencji w JSON","metadata_general_license_link":"Id\u017a do strony z pelnym opisem licencji","metadata_general_date":"Data zrobienia","metadata_camera_make":"Marka","metadata_camera_focal_length":"Ogniskowa","metadata_location_longitude":"D\u0142ugo\u015b\u0107 geograficzna","metadata_location_latitude":"Szeroko\u015b\u0107 geograficzna","metadata_location_orientation":"Kierunek robienia zdj\u0119cia","metadata_location_precision":"Precyzja lokalizacji","metadata_quality":"Ocena jako\u015bci","metadata_quality_help":"Dowiedz si\u0119 wi\u0119cej o ocenie jako\u015bci","metadata_quality_score":"Ocena globalna","metadata_quality_gps_score":"Ocena pozycji","metadata_quality_resolution_score":"Ocena rozdzielczo\u015bci","report_auth":"To zg\u0142oszenie b\u0119dzie wys\u0142anie przy pomocy Twojego konta \\"{a}\\"","report_nature_label":"Typ problemu","report_details_placeholder":"Opcjonalnie, mo\u017cesz doda\u0107 szczeg\xf3\u0142y o problemie","report_failure":"B\u0142\u0105d wyst\u0105pi\u0142 podczas tworzenia zg\u0142oszenia: {e}. Prosz\u0119 spr\xf3buj ponownie.","filter_qualityscore_help":"Kliknij, aby w\u0142\u0105czy\u0107 lub wy\u0142\u0105czy\u0107","error_josm":"JOSM nie odpowiada, czy jest uruchomiony i czy dost\u0119p zdalny jest w\u0142\u0105czony?"},"psv":{"twoFingers":"U\u017cyj dw\xf3ch palc\xf3w do nawigacji","ctrlZoom":"U\u017cyj ctrl + rolka myszy, aby powi\u0119kszy\u0107 zdj\u0119cie","loadError":"Panorama nie mo\u017ce by\u0107 za\u0142adowana"},"maplibre":{"GeolocateControl.FindMyLocation":"Znajd\u017a moj\u0105 lokalizacj\u0119","GeolocateControl.LocationNotAvailable":"Lokalizacja niedost\u0119pna"},"map":{"thumbnail":"Miniaturki najechanego zdj\u0119cia","not_public":"Niewidoczne publicznie","slow_loading":"Mapa \u0142aduje si\u0119 wolno i mo\u017ce si\u0119 wydawaj popsuta","loading":"\u0141adowanie\u2026"}}')},6611:ae=>{"use strict";ae.exports=JSON.parse('{"pnx":{"loading_labels_fun":["\ud83e\udda5 Detectando placas de travessia de bichos-pregui\xe7a","\ud83d\ude98 Procurando Panoramax Car \xa9","\u2615 Injetando cafe\xedna","\ud83d\ude00 Sorria, voc\xea est\xe1 mapeado!","\ud83d\udc08 Compartilhando imagens de gatos","\ud83d\ude34 Reduzindo a procrastina\xe7\xe3o","\u2615 Preparando um cafezinho","\ud83d\udc27 Abrindo c\xf3digo-fonte","\ud83d\ude87 Indexando as esta\xe7\xf5es de metr\xf4","\ud83e\uddf9 Limpeza de metadados","\ud83d\ude92 Enviando fotos do quartel dos bombeiros","\ud83d\udeb2 Atualiza\xe7\xe3o das ciclovias","\ud83d\ude89 Passagem pela plataforma da esta\xe7\xe3o","\ud83d\udef0\ufe0f Procurando sat\xe9lites","\ud83d\udea1 Subindo o P\xe3o de A\xe7\xfacar de telef\xe9rico","\ud83c\udf5f Localizando lanchonetes","\ud83e\uddd1\u200d\ud83d\udcbb Depurando a interface","\ud83d\udcc8 Incrementando as estat\xedsticas","\ud83c\udff0 Fortificando fortalezas em Fortaleza","\ud83c\udfa8 Redesenho da interface","\ud83d\udc2c Procurando o boto-rosa no rio Amazonas","\ud83e\uddc0 Maturando os queijos minas","\ud83c\udf04 Calculando a insola\xe7\xe3o em Ubatuba","\ud83c\udf0a Medindo as mar\xe9s altas"],"zoom":"Zoom","zoomOut":"Diminuir o zoom","zoomIn":"Ampliar o zoom","moveUp":"Mover para cima","moveDown":"Mover para baixo","moveLeft":"Mover para a esquerda","expand":"Expandir","expand_info":"Fazer com que o widget apare\xe7a em p\xe1gina inteira","show_psv":"Exibir o visualizador de imagens","show_map":"Exibir o mapa","minimize_short":"Ocultar","options":"Op\xe7\xf5es","filters":"Filtros","layers":"Camadas","search":"Pesquisa","search_empty":"Nenhum resultado encontrado","search_address":"Pesquisar um endere\xe7o, cidade\u2026","search_user":"Pesquisar um nome de usu\xe1rio\u2026","share":"Compartilhar","share_links":"Links","share_page":"Link para esta foto","share_image":"Imagem HD","share_rss":"Feed RSS","share_embed":"Incorporar no seu site","share_embed_docs":"Leia mais sobre a configura\xe7\xe3o de incorpora\xe7\xe3o","share_print":"Imprimir","panoramax":"Panoramax","whats_panoramax":"Panoramax \xe9 o geo-reposit\xf3rio comum para imagens de territ\xf3rios.","copy":"Copiar","copied":"Copiado","error":"Temos um problema\u2026","error_retry":"Por favor, tente novamente mais tarde","sequence_play":"Reproduzir esta sequ\xeancia","sequence_pause":"Pausar sequ\xeancia","sequence_next":"Pr\xf3xima imagem na sequ\xeancia","sequence_more":"Mais op\xe7\xf5es de reprodu\xe7\xe3o","sequence_speed":"Velocidade de reprodu\xe7\xe3o","legend_license":"Licen\xe7a: {l}","legend_title":"Exibir detalhes da imagem","id":"iD","geo_uri":"Aplicativo externo","josm":"JOSM","josm_live":"Ativar a sincroniza\xe7\xe3o autom\xe1tica do JOSM ao carregar imagens","loading_labels_serious":["\ud83d\uddfa\ufe0f Carregando dados do mapa","\ud83d\udda5\ufe0f Consultando a API","\ud83d\uddbc\ufe0f Carregando miniaturas","\ud83d\udd0d Analisando os metadados EXIF","\ud83c\udfd8\ufe0f Renderiza\xe7\xe3o 3D","\ud83d\udcf7 Inicializando imagens em 360\xb0","\ud83d\udfe0 Ajuste de cores","\ud83d\udcaf Computando o Quality Score \xa9","\ud83d\udce1 Baixando atualiza\xe7\xf5es","\ud83c\udf0d Buscando blocos de mapa","\ud83d\udcf8 Processando sombras"],"moveMiddle":"Centralizar a visualiza\xe7\xe3o","share_rss_title":"Feed RSS de novas sequ\xeancias na \xe1rea do mapa atualmente vis\xedvel","contribute_id":"Contribua para o OpenStreetMap com o editor iD","moveRight":"Mover para a direita","sequence_prev":"Imagem anterior na sequ\xeancia","minimize":"Ocultar este widget. Voc\xea pode exibi-lo novamente usando o bot\xe3o no canto inferior esquerdo","error_click":"Continuar","semantics_features_none":"Ainda n\xe3o foi desenhado nenhuma caracter\xedstica nesta imagem.","semantics_draw_annotation":"Voc\xea pode desenhar o objeto que deseja adicionar na imagem (opcional).","semantics_login_needed":"Para editar etiquetas ou caracter\xedsticas de imagens, voc\xea precisa fazer login na inst\xe2ncia Panoramax {n}. Deseja fazer login?","filter_zoom_in":"Amplie o mapa para ver este filtro","picture_360":"360\xb0","picture_flat_long":"Imagem cl\xe1ssica","filter_qualityscore":"Pontua\xe7\xe3o de qualidade","filter_qualityscore_help":"Clique para ativar ou desativar","qualityscore_title":"Sobre a pontua\xe7\xe3o de qualidade","qualityscore_doc_2":"A nota \xe9 apresentada aos usu\xe1rios como uma pontua\xe7\xe3o A/B/C/D/E (A \xe9 a melhor, E a pior) e mostrada graficamente atrav\xe9s desta escala:","semantics_features":"Caracter\xedsticas da imagem","semantics_features_default_title":"Etiqueta {nb}","semantics_features_subtitle":"{nb} propriedades associadas","semantics_annotation_tooltip":"Clique para ver detalhes","semantics_hide_all_tags":"Ocultar todas as etiquetas","semantics_key":"Chave","semantics_value":"Valor","semantics_value_doc":"Saiba mais sobre esta etiqueta","semantics_tags_picture":"Etiquetas de imagem","qualityscore_doc_3":"\xc9 calculada com base na precis\xe3o do GPS e na resolu\xe7\xe3o da imagem. Um sistema profissional ter\xe1 uma classifica\xe7\xe3o A, uma c\xe2mera de a\xe7\xe3o 360\xb0 ter\xe1 uma classifica\xe7\xe3o B e um smartphone ter\xe1 uma classifica\xe7\xe3o C/D/E.","error_psv":"O Photo Sphere Viewer n\xe3o est\xe1 carregando corretamente","error_pic":"A imagem solicitada n\xe3o foi encontrada","error_api":"O servidor de imagens n\xe3o est\xe1 dispon\xedvel","error_webgl":"O WebGL n\xe3o \xe9 compat\xedvel com o seu navegador","error_api_compatibility":"O servidor de imagens n\xe3o \xe9 compat\xedvel com esta vers\xe3o do visualizador","filter_date":"Data","filter_date_1month":"1 m\xeas","filter_date_6months":"6 meses","filter_date_1year":"1 ano","filter_user":"Usu\xe1rio","filter_user_mypics":"Minhas imagens","error_josm":"O JOSM n\xe3o responde. Ele est\xe1 sendo executado e est\xe1 ativado o acesso remoto?","filter_picture":"Tipo de imagem","picture_flat":"Cl\xe1ssica","picture_360_long":"Imagem panor\xe2mica","qualityscore_doc_link":"Saiba mais sobre a Pontua\xe7\xe3o de Qualidade","metadata_general_picid_link":"Ir para a descri\xe7\xe3o JSON da imagem","metadata_camera_resolution":"Resolu\xe7\xe3o","metadata_exif_doc":"Documenta\xe7\xe3o para etiquetas EXIF","metadata_exif_doc_title":"Acesse a documenta\xe7\xe3o do Exiv2 para obter detalhes completos sobre as defini\xe7\xf5es das tags EXIF e XMP","semantics_title":"Etiquetas","semantics_show_all_tags":"Mostrar todas as etiquetas","semantics_tags_picture_none":"Ainda n\xe3o foram definidas etiquetas para esta imagem.","semantics_send_fail":"N\xe3o \xe9 poss\xedvel salvar suas altera\xe7\xf5es, por favor, tente novamente mais tarde","report_details_placeholder":"Opcionalmente, voc\xea pode adicionar detalhes sobre o problema","report_nature":{"inappropriate":"A imagem \xe9 inadequada (sem rela\xe7\xe3o, nudez\u2026)","":"Selecione o tipo do problema\u2026","blur_missing":"O rosto de uma pessoa ou a placa de um carro s\xe3o vis\xedveis","blur_excess":"Um desfoque desnecess\xe1rio foi aplicado a um objeto","privacy":"Um caminho ou propriedade privada \xe9 vis\xedvel","picture_low_quality":"A imagem \xe9 de baixa qualidade","mislocated":"A imagem est\xe1 mal posicionada no mapa","copyright":"A imagem viola direitos autorais","other":"Qualquer outro tipo de problema"},"error_nopic":"Nenhuma imagem dispon\xedvel na posi\xe7\xe3o indicada","picture_all":"Todas","metadata_location_copy_more":"Mais op\xe7\xf5es de c\xf3pia de coordenadas","semantics_tags":"{nb} etiquetas","semantics_zero_annotations":"Nenhuma caracter\xedstica desenhada nesta imagem","semantics_save_drawn_annotation_incomplete":"Voc\xea deve desenhar um ret\xe2ngulo que se encaixe na imagem antes de validar","map_background":"Fundo do mapa","map_background_aerial":"A\xe9reo","map_background_streets":"Ruas","map_theme":"Tema do mapa","map_theme_default":"Cl\xe1ssico","map_theme_age":"Data da captura","map_theme_age_1":"> 2 anos","map_theme_age_2":"< 2 anos","map_theme_age_3":"< 1 ano","map_theme_age_4":"< 1 m\xeas","map_theme_type":"Tipo de c\xe2mera","contrast":"Ativar maior contraste da imagem","metadata":"Metadados de imagem","metadata_summary":"Resumo","metadata_general_copy_id":"Copiar ID","metadata_general_copy_picid":"Copiar ID da imagem","metadata_general_picid":"Imagem","metadata_general_seqid":"Sequ\xeancia","metadata_general_seqid_link":"Ir para a descri\xe7\xe3o JSON da sequ\xeancia","metadata_general_author":"Autor","metadata_general_license":"Licen\xe7a","metadata_general_license_link":"Consulte a descri\xe7\xe3o completa da licen\xe7a","metadata_general_date":"Data da captura","metadata_general_instance":"Inst\xe2ncia de origem","metadata_camera":"C\xe2mera","metadata_camera_make":"Marca","metadata_camera_model":"Modelo","metadata_camera_type":"Tipo","metadata_camera_focal_length":"Dist\xe2ncia focal","metadata_location":"Posi\xe7\xe3o","metadata_location_coordinates":"Coordenadas (longitude, latitude)","metadata_location_orientation":"Dire\xe7\xe3o","metadata_location_precision":"Precis\xe3o de posicionamento","metadata_location_copy":"Copiar {v}","metadata_quality":"Qualidade","metadata_quality_help":"Saiba mais sobre a Pontua\xe7\xe3o de Qualidade","metadata_quality_score":"Pontua\xe7\xe3o global","metadata_quality_gps_score":"Pontua\xe7\xe3o de posicionamento","metadata_quality_resolution_score":"Pontua\xe7\xe3o de resolu\xe7\xe3o","metadata_quality_missing":"nenhum valor definido na imagem","metadata_exif":"EXIF","metadata_exif_name":"Etiqueta","metadata_exif_value":"Valor","semantics_editor_error":"A sintaxe est\xe1 inv\xe1lida. Suas etiquetas podem ficar assim:\\nchave=valor\\nprefixo|chave=valor\\nprefixo|chave[qualif_chave=qualif_val]=valor\\n\\nO comprimento m\xe1ximo da chave \xe9 de 256 caracteres, e o comprimento m\xe1ximo do valor \xe9 de 2048 caracteres.","report":"Denunciar","report_auth":"Este relat\xf3rio ser\xe1 enviado usando sua conta \\"{a}\\"","report_nature_label":"Causa do problema","semantics_qualifiers":"Qualificadores","semantics_show_annotations":"Exibir caracter\xedsticas da imagem","semantics_hide_annotations":"Ocultar caracter\xedsticas da imagem","semantics_add_annotation":"Adicionar uma nova etiqueta","semantics_save_drawn_annotation":"Salvar posi\xe7\xe3o","semantics_undo_drawn_annotation":"Cancelar","semantics_delete_annotation":"Excluir esta caracter\xedstica","semantics_delete_annotation_confirm":"Voc\xea realmente deseja excluir esta etiqueta ?","semantics_hashtags":"Hashtags da imagem","semantics_wikidata_properties":{"P31":"inst\xe2ncia de","P279":"subclasse de","P361":"parte de"},"semantics_editor_example":"chave=valor\\nprefixo|chave=valor","semantics_edit":"Editar atributos","semantics_save":"Salvar suas altera\xe7\xf5es","semantics_undo":"Cancelar suas edi\xe7\xf5es","semantics_cantsave_invalid":"N\xe3o \xe9 poss\xedvel salvar as altera\xe7\xf5es, entrada \xe9 inv\xe1lida","semantics_send_ok":"Suas edi\xe7\xf5es foram enviadas com \xeaxito","report_whole_sequence":"Isso diz respeito a toda a sequ\xeancia","report_details":"Detalhes adicionais","report_email":"Seu e-mail","report_email_placeholder":"Opcional","report_submit":"Enviar","report_wait":"Enviando relat\xf3rio\u2026","qualityscore_doc_1":"O Panoramax oferece uma pontua\xe7\xe3o de qualidade para cada imagem. Isso permite uma f\xe1cil filtragem do mapa e uma exibi\xe7\xe3o abrangente da disponibilidade de imagens de alta qualidade.","map_theme_score":"Pontua\xe7\xe3o de qualidade","report_success":"O relat\xf3rio foi enviado com sucesso. Ele ser\xe1 analisado assim que poss\xedvel.","report_failure":"Ocorreu um erro ao criar o relat\xf3rio: {e}. Tente novamente mais tarde.","semantics_key_doc":"Saiba mais sobre esta chave","semantics_doc":"Ajuda","semantics_erase_annotation":"Apagar caracter\xedstica desenhada","semantics_doc_title":"Sobre etiquetas","semantics_doc_info1":"D\xea contexto a uma imagem usando etiquetas. Voc\xea pode marc\xe1-la como capturada por carro com a etiqueta transport=car.","semantics_doc_link":"Saiba mais sobre etiquetas","semantics_doc_info3":"Alguns objetos s\xe3o detectados automaticamente com IA: a qualidade n\xe3o \xe9 garantida.","semantics_doc_info2":"Voc\xea tamb\xe9m pode desenhar objetos na imagem: sinais de tr\xe2nsito, equipamentos urbanos\u2026 Marque o que voc\xea v\xea usando as etiquetas existentes. Voc\xea tamb\xe9m pode criar suas pr\xf3prias etiquetas, se necess\xe1rio.","semantics_picture_tags":"Etiqueta de imagem","semantics_sequence_tags":"Etiqueta de sequ\xeancia","semantics_annotation_tags":"Etiqueta de objeto","filter_gps_precision":"Precis\xe3o de localiza\xe7\xe3o","filter_gps_precision_lessthan":"Menos de {n} metros","filter_gps_precision_between":"Entre {n1} e {n2} metros","filter_gps_precision_morethan":"Mais de {n} metros","map_theme_gps":"Precis\xe3o de localiza\xe7\xe3o"},"psv":{"ctrlZoom":"Use ctrl + rolagem para ampliar a imagem","loadError":"O panorama n\xe3o pode ser carregado","twoFingers":"Use dois dedos para navegar"},"maplibre":{"GeolocateControl.LocationNotAvailable":"Localiza\xe7\xe3o n\xe3o dispon\xedvel","GeolocateControl.FindMyLocation":"Encontre minha localiza\xe7\xe3o"},"map":{"thumbnail":"Miniatura da imagem ao passar o cursor","not_public":"N\xe3o vis\xedvel publicamente","slow_loading":"O mapa demora a carregar e pode parecer danificado","map_data":"Mapa baseado em {m}","more_panoramax":"Descubra mais sobre o Panoramax","loading":"Carregando\u2026"}}')},991:ae=>{"use strict";ae.exports=JSON.parse('{"psv":{"twoFingers":"Anv\xe4nd tv\xe5 fingrar f\xf6r att panorera","loadError":"Panoramat kan inte laddas","ctrlZoom":"Anv\xe4nd ctrl + scroll f\xf6r att zooma in p\xe5 bilden"},"pnx":{"moveUp":"Flytta upp","zoom":"Zoom","zoomOut":"Zooma ut","zoomIn":"Zooma in","moveDown":"Flytta ner","moveLeft":"Flytta v\xe4nster","moveRight":"Flytta h\xf6ger","moveMiddle":"Centrera vy","expand":"Expandera","show_psv":"Visa bildvisaren","show_map":"Visa kartan","expand_info":"Visa widgeten p\xe5 hela sidan","minimize":"G\xf6m denna flik, du kan visa den igen genom att anv\xe4nda knappen i nedersta v\xe4nstra h\xf6rnet","minimize_short":"G\xf6m","options":"Alternativ","search":"S\xf6k","search_empty":"Inga resultat hittade","filters":"Filter","layers":"Lager","share":"Dela","share_links":"L\xe4nkar","share_page":"L\xe4nka till denna sida","share_image":"HD bild","share_rss":"RSS feed","share_embed":"B\xe4dda in p\xe5 din hemsida","share_embed_docs":"L\xe4s mer om inb\xe4ddad konfiguration","share_print":"Skriv ut","copy":"Kopiera","copied":"Kopierad","error":"Vi har ett problem\u2026","error_click":"Forts\xe4tt","error_retry":"V\xe4nligen f\xf6rs\xf6k igen senare","sequence_next":"N\xe4sta bild i sekvensen","sequence_play":"Spela upp bilder i sekvensen","sequence_pause":"Pausa sekvens","sequence_more":"Mera uppspelningsalternativ","sequence_speed":"Uppspelningshastighet","legend_license":"Licens: {l}","search_address":"S\xf6k en adress, stad\u2026","edit_osm":"Redigera OSM","loading_labels_serious":["\ud83d\uddfa\ufe0f Laddar kartdata","\ud83d\udda5\ufe0f Anropar API","\ud83d\uddbc\ufe0f Laddar miniatyrer","\ud83d\udd0d Analyserar EXIF metadata","\ud83c\udfd8\ufe0f 3D rendering","\ud83d\udcf7 Initialiserar 360\xb0 bilder","\ud83d\udfe0 F\xe4rg balansering","\ud83d\udcaf Ber\xe4kna Kvalitetspo\xe4ng \xa9"],"loading_labels_fun":["\ud83e\udd8c R\xe4knar \xe4lgar","R\xe4knar gula bilar","\u2615 Bunkrar upp med kaffe","Kaj nu simmar du ur bild!","\ud83d\udc08 Delar kattbilder","\ud83d\ude34 Prokastinerar","\ud83e\uded6 Kokar te","\ud83d\udc27 \xd6ppnar k\xe4llkod","\ud83d\ude87 R\xe4knar t\xe5g","\ud83e\uddf9 St\xe4dar upp bland metadata","\ud83d\udc3f\ufe0f R\xe4knar ekorrar","\ud83d\udeb2 R\xe4knar cykelst\xe4ll","\ud83d\ude89 G\xe5r igenom stationer","\ud83d\udef0\ufe0f S\xf6ker satelliter","\ud83e\uddd1\u200d\ud83c\udf73 Lagar k\xf6ttbullar","\ud83e\uddcdSt\xe5r i k\xf6","\ud83e\uddd1\u200d\ud83d\udcbb Fels\xf6ker gr\xe4nsnitt","\ud83d\udcc8 \xd6kar statistik"],"error_psv":"Foto-sf\xe4r visaren laddar inte ordentligt","error_nopic":"Ingen bild finns p\xe5 angiven position","error_api":"Bildservern \xe4r inte tillg\xe4nlig","error_webgl":"WebGL st\xf6ds inte i din webbl\xe4sare","error_api_compatibility":"Bildservern \xe4r inte kompatibel med den h\xe4r visarens version","filter_date":"Datum","filter_date_1month":"1 m\xe5nad","filter_date_1year":"1 \xe5r","filter_user":"Anv\xe4ndare","filter_user_mypics":"Mina bilder","filter_picture":"Bildtyp","filter_zoom_in":"Zooma in f\xf6r att se detta filter","picture_360":"360\xb0","filter_qualityscore_help":"Klicka f\xf6r att sl\xe5 p\xe5 eller av","qualityscore_title":"Om Kvalitetspo\xe4ng","filter_qualityscore":"Kvalitetspo\xe4ng","qualityscore_doc_2":"Kvalitet visas som en skala p\xe5 A/B/C/D/E (A \xe4r b\xe4st, E \xe4r s\xe4mst) och visas grafisk genom skalan:","map_theme_default":"Klassisk","map_theme_age_1":"> 2 \xe5r","map_theme_age_2":"< 2 \xe5r","map_theme_age_3":"< 1 \xe5r","map_theme_age_4":"< 1 m\xe5nad","map_theme_type":"Kameratyp","contrast":"Aktivera h\xf6gre bildkontrast","metadata":"Bildmetadata","metadata_general_picid":"Bild-identifierare","metadata_general_seqid":"Sekvens-identifierare","qualityscore_doc_link":"Mer information om hur Kvalitetspo\xe4ng ber\xe4knas finns i v\xe5r dokumentation.","map_theme_score":"Kvalitetspo\xe4ng","metadata_general_seqid_link":"G\xe5 till JSON beskrivning av sekvensen","metadata_general_author":"Upphovsman","metadata_general_license":"Licens","metadata_general_license_link":"Se full licensbeskrivning","metadata_general_date":"Bild tagen","metadata_camera":"Kamera","metadata_camera_make":"M\xe4rke","metadata_camera_model":"Modell","metadata_camera_type":"Typ","metadata_camera_resolution":"Uppl\xf6sning","metadata_location":"Plats","metadata_location_longitude":"Longitud","metadata_location_latitude":"Latitud","metadata_location_orientation":"Kamerariktning","metadata_location_precision":"Positionsprecision","metadata_quality":"Kvalitetspo\xe4ng","metadata_quality_score":"Global po\xe4ng","metadata_quality_gps_score":"Positioneringspo\xe4ng","metadata_quality_resolution_score":"Uppl\xf6sningspo\xe4ng","metadata_quality_missing":"Inget v\xe4rde satt i bilden","metadata_exif":"EXIF / XMP","metadata_exif_name":"Tag","metadata_exif_value":"V\xe4rde","report":"Rapportera bild","search_user":"S\xf6k anv\xe4ndarnamn\u2026","legend_title":"Visa detaljer f\xf6r bild","report_auth":"Denna rapport kommer skickas genom ditt konto \\"{a}\\"","share_rss_title":"RSS feed av nya sekvensen f\xf6r karta i bild","error_josm":"JOSM svarar inte, k\xf6rs det och \xe4r remote p\xe5slaget?","sequence_prev":"F\xf6reg\xe5ende bild i sekvensen","josm_live":"Aktivera automatisk JOSM synkronisering vid inladdning av bild","metadata_general_picid_link":"G\xe5 till JSON beskrivning av bilden","metadata_quality_help":"L\xe4s mer om Kvalitetspo\xe4ng","error_pic":"Beg\xe4rd bild hittades inte","qualityscore_doc_3":"Det r\xe4knas ut baserat p\xe5 GPS precision och bildens uppl\xf6sning. Ett profesionellt system kommer ha A-kvalit\xe9, en 360\xb0 actionkamera kommer ha B-kvalit\xe9 och en telefon kommer ha C/D/E-kvalit\xe9.","qualityscore_doc_1":"Panoramax erbjuder en Kvalitetspo\xe4ng f\xf6r varje bild. Det m\xf6jlig\xf6r enkel kartfiltrering och en omfattande uppvisning av tillg\xe4nligheten av bilder av h\xf6g kvalitet.","metadata_camera_focal_length":"Br\xe4nnvidd","picture_flat":"Klassisk","map_background":"Kartbakgrund","map_background_aerial":"Sattelit","map_background_streets":"Gator","map_theme":"Karttema","map_theme_age":"Fotodatum","report_nature_label":"Typ av problem","report_nature":{"":"V\xe4lj typen av problem\u2026","blur_missing":"En persons ansikte eller en registreringspl\xe5t \xe4r synlig","blur_excess":"Ett objekt som inte beh\xf6ver suddas \xe4r suddad","inappropriate":"Bilden \xe4r ol\xe4mplig(orelaterat, nakenhet...)","privacy":"En privat v\xe4g eller fastighet \xe4r synlig","picture_low_quality":"Bilden \xe4r av mycket d\xe5lig kvalitet","mislocated":"Bilden \xe4r placerat d\xe5lig p\xe5 kartan","copyright":"Bilden inkr\xe4nker p\xe5 upphovsr\xe4tt","other":"N\xe5got annat typ av problem"},"report_whole_sequence":"Detta g\xe4ller hela sekvensen","report_details":"Ytterligare detaljer","report_details_placeholder":"Valfritt, kan du l\xe4gga till information om problemet och varf\xf6r det \xe4r ett problem","report_email":"Din e-post","report_email_placeholder":"Valfri","report_submit":"Skicka","report_wait":"Skickar rapport \u2026","report_success":"Rapporten har skickats. Det kommer att ses \xf6ver s\xe5 snart som m\xf6jligt.","report_failure":"Ett fel uppstod n\xe4r rapporten skapades: {e}. F\xf6rs\xf6k igen senare."},"maplibre":{"GeolocateControl.FindMyLocation":"Hitta min postion","GeolocateControl.LocationNotAvailable":"Plats inte tillg\xe4nlig"},"map":{"loading":"Laddar\u2026","thumbnail":"Miniatyrbild av r\xf6rd bild","not_public":"Inte offentligt synligt","slow_loading":"Kartan laddas l\xe5ngsamt och kan verka trasig"}}')},7304:ae=>{"use strict";ae.exports=JSON.parse('{"psv":{"twoFingers":"Gezinmek i\xe7in iki parma\u011f\u0131n\u0131z\u0131 kullan\u0131n","loadError":"Panorama y\xfcklenemedi","ctrlZoom":"G\xf6r\xfcnt\xfcy\xfc yak\u0131nla\u015ft\u0131rmak i\xe7in ctrl + kayd\u0131rma tu\u015flar\u0131n\u0131 kullan\u0131n"},"pnx":{"search_empty":"Sonu\xe7 bulunamad\u0131","zoom":"Yak\u0131nla\u015ft\u0131r","zoomIn":"Yak\u0131nla\u015ft\u0131r","expand":"Geni\u015flet","layers":"Katmanlar","search":"Ara","minimize_short":"Gizle","share_links":"Ba\u011flant\u0131lar","share_embed_docs":"G\xf6mme yap\u0131land\u0131rmas\u0131 hakk\u0131nda daha fazla bilgi edinin","share_print":"Yazd\u0131r","panoramax":"Panoramax","copied":"Kopyaland\u0131","error_click":"Devam et","sequence_pause":"Sekans duraklat","legend_title":"Resim detaylar\u0131n\u0131 g\xf6r\xfcnt\xfcle","contribute_id":"iD edit\xf6r ile OpenStreetMap\'e katk\u0131da bulunun","josm":"JOSM","loading_labels_serious":["\ud83d\uddfa\ufe0f Harita verisi y\xfckleniyor","\ud83d\udda5\ufe0f API sorgulan\u0131yor","\ud83d\uddbc\ufe0f K\xfc\xe7\xfck resimler y\xfckleniyor","\ud83d\udd0d EXIF meta verileri analiz ediliyor","\ud83c\udfd8\ufe0f 3D i\u015fleniyor","\ud83d\udcf7 360\xb0 resimler ba\u015flat\u0131l\u0131yor","\ud83d\udfe0 Renk dengeleme","\ud83d\udcaf Kalite Skoru Hesaplan\u0131yor \xa9","\ud83d\udce1 G\xfcncellemeler indiriliyor","\ud83c\udf0d Harita d\xf6\u015femeleri getiriliyor","\ud83d\udcf8 G\xf6lgeler i\u015fleniyor"],"metadata_general_license":"Lisans","metadata_general_picid":"Resim","metadata_general_seqid":"Sekans","metadata_general_seqid_link":"Sekans\u0131n JSON a\xe7\u0131klamas\u0131na git","metadata_camera_model":"Model","metadata_location":"Pozisyon","metadata_exif":"EXIF","metadata_exif_name":"Etiket","metadata_exif_value":"De\u011fer","semantics_title":"Etiketler","share_embed":"Web sitenize yerle\u015ftirin","sequence_speed":"Oynat\u0131c\u0131 h\u0131z\u0131","metadata_summary":"\xd6zet","metadata_general_license_link":"Lisans\u0131n tam a\xe7\u0131klamas\u0131n\u0131 g\xf6r\xfcn","metadata_quality":"Kalite","zoomOut":"Uzakla\u015ft\u0131r","share":"Payla\u015f","share_image":"HD Resim","copy":"Kopyala","error_retry":"L\xfctfen daha sonra tekrar deneyin","show_map":"Haritay\u0131 g\xf6r\xfcnt\xfcle","metadata":"Resim meta verisi","metadata_general_picid_link":"Resmin JSON a\xe7\u0131klamas\u0131na git","metadata_camera_type":"Tip","metadata_camera_resolution":"\xc7\xf6z\xfcn\xfcrl\xfck","metadata_quality_resolution_score":"\xc7\xf6z\xfcn\xfcrl\xfck skoru","metadata_camera":"Kamera","report_wait":"Rapor g\xf6nderiliyor\u2026","semantics_show_all_tags":"T\xfcm etiketleri g\xf6r\xfcnt\xfcle","semantics_hide_all_tags":"T\xfcm etiketleri gizle","semantics_value":"De\u011fer","semantics_delete_annotation":"\xd6zelli\u011fi sil","semantics_annotation_tooltip":"Detaylar\u0131 g\xf6r\xfcnt\xfclemek i\xe7in t\u0131klay\u0131n","semantics_tags_picture":"Resim etiketleri","semantics_delete_annotation_confirm":"Etiketi ger\xe7ekten silmek istiyor musunuz?","semantics_save":"De\u011fi\u015fiklikleri kaydet","minimize":"Bu widget\'\u0131 gizleyin, sol alt k\xf6\u015fedeki d\xfc\u011fmeyi kullanarak tekrar g\xf6sterebilirsiniz","moveUp":"Yukar\u0131 hareket et","moveDown":"A\u015fa\u011f\u0131 hareket et","moveLeft":"Sola hareket et","moveRight":"Sa\u011fa hareket et","moveMiddle":"Merkez g\xf6r\xfcn\xfcm","expand_info":"Widget\'\u0131n tam sayfada g\xf6r\xfcnmesini sa\u011fla","show_psv":"Resim g\xf6r\xfcnt\xfcleyiciyi g\xf6ster","options":"Se\xe7enekler","filters":"Filtreler","report_nature":{"picture_low_quality":"G\xf6r\xfcnt\xfc kalitesi d\xfc\u015f\xfck","other":"Ba\u015fka herhangi bir sorun","":"Sorunun niteli\u011fini se\xe7in\u2026","mislocated":"Resim haritada k\xf6t\xfc konumland\u0131r\u0131lm\u0131\u015f","copyright":"Resim telif hakk\u0131n\u0131 ihlal ediyor","blur_missing":"Bir ki\u015finin y\xfcz\xfc veya ara\xe7 plakas\u0131 g\xf6r\xfcn\xfcyor","blur_excess":"Bir nesneye gereksiz bir bulan\u0131kl\u0131k uyguland\u0131","inappropriate":"Resim uygunsuz (ilgisiz, \xe7\u0131plakl\u0131k\u2026)","privacy":"\xd6zel bir yol veya m\xfclk g\xf6r\xfcn\xfcyor"},"map_background_streets":"Sokaklar","contrast":"Daha y\xfcksek g\xf6r\xfcnt\xfc kontrast\u0131n\u0131 etkinle\u015ftirin","search_address":"Bir adres ya da \u015fehir aray\u0131n\u2026","search_user":"Bir kullan\u0131c\u0131 ad\u0131 aray\u0131n\u2026","share_page":"Resim ba\u011flant\u0131s\u0131","share_rss":"RSS beslemesi","share_rss_title":"\u015eu anda g\xf6r\xfcnen harita alan\u0131ndaki yeni sekanslar\u0131n RSS beslemesi","whats_panoramax":"Panoramax, b\xf6lgelerin resimlerinin co\u011frafi ortak alan\u0131d\u0131r.","error":"Bir sorunumuz var\u2026","sequence_next":"S\u0131radaki resim","sequence_play":"Bu sekans\u0131 izleyin","sequence_prev":"\xd6nceki resim","sequence_more":"Daha fazla oynatma se\xe7ene\u011fi","legend_license":"Lisans: {l}","id":"iD","geo_uri":"Harici uygulama","josm_live":"Resim y\xfcklenirken JOSM otomatik senkronizasyonunu etkinle\u015ftir","loading_labels_fun":["\ud83e\udd8c Geyik ge\xe7i\u015f i\u015faretlerini tespit etme","\ud83d\ude98 Panoramax Arac\u0131n\u0131 Bul \xa9","\u2615 Kafein enjekte ediliyor","\ud83d\ude00 G\xfcl\xfcmse, haritaland\u0131n!","\ud83d\udc08Kedi resimleri payla\u015f\u0131n","\ud83d\ude34 Ertelemeyi azalt","\ud83e\uded6 \xc7ay demle","\ud83d\udc27 Kaynak kodunu a\xe7","\ud83d\ude87 Yeralt\u0131 istasyonlar\u0131n\u0131n indeksleniyor","\ud83e\uddf9 Meta veri temizleme","\ud83d\ude92 \u0130tfaiye istasyonu resimleri g\xf6nderiliyor","\ud83d\udeb2Ye\u015fil yollar g\xfcncelleniyor","\ud83d\ude89 \u0130stasyon platformu turu","\ud83d\udef0\ufe0f Uydular Aran\u0131yor","\ud83d\udc65 Ki\u015filikler yaz\u0131l\u0131yor","\ud83d\udc1f Bal\u0131k ve patates k\u0131zartmas\u0131 d\xfckkanlar\u0131 bulunuyor","\ud83e\uddd1\u200d\ud83d\udcbb Hata ay\u0131klama aray\xfcz\xfc","\ud83d\udcc8 \u0130statistikler artt\u0131r\u0131l\u0131yor","\ud83e\udd16 Anlam bilimi \xf6\u011freniliyor","\ud83c\udfa8 Aray\xfcz yeniden tasarlan\u0131yor","\ud83d\udcc5 Foto\u011fraf haritalama partileri planla","\ud83e\uddc0 Olgunla\u015fan \xe7edarlar","\ud83c\udf04 Cornwall g\xfcne\u015f \u0131\u015f\u0131\u011f\u0131n\u0131n hesaplanmas\u0131","\ud83c\udf0a Y\xfcksek gelgitlerin \xf6l\xe7\xfcm\xfc"],"error_pic":"\u0130stenen resim bulunamad\u0131","error_nopic":"Belirtilen konumda resim mevcut de\u011fil","error_api":"Resim sunucusu kullan\u0131lam\u0131yor","error_webgl":"Taray\u0131c\u0131n\u0131z WebGL\'yi desteklemiyor","error_josm":"JOSM yan\u0131t vermiyor, \xe7al\u0131\u015f\u0131yor mu ve uzaktan eri\u015fim etkin mi?","error_api_compatibility":"Resim sunucusu bu g\xf6r\xfcnt\xfcleyici s\xfcr\xfcm\xfcyle uyumlu de\u011fil","filter_date":"Tarih","filter_date_1month":"1 ay","filter_date_6months":"6 ay","filter_date_1year":"1 y\u0131l","filter_user":"Kullan\u0131c\u0131","filter_user_mypics":"Resimlerim","filter_picture":"Resim tipi","filter_zoom_in":"Bu filtreyi g\xf6rmek i\xe7in haritay\u0131 yak\u0131nla\u015ft\u0131r\u0131n","picture_all":"T\xfcm\xfc","picture_flat":"Klasik","picture_360":"360\xb0","picture_flat_long":"Klasik resim","filter_qualityscore_help":"Etkinle\u015ftirmek veya devre d\u0131\u015f\u0131 b\u0131rakmak i\xe7in t\u0131klay\u0131n","qualityscore_title":"Kalite skoru hakk\u0131nda","qualityscore_doc_link":"Kalite Puan\u0131 hakk\u0131nda daha fazla bilgi edinin","map_background":"Harita arkaplan\u0131","map_theme":"Harita temas\u0131","map_theme_default":"Klasik","map_theme_age":"Yakalama tarihi","map_theme_age_1":"> 2 y\u0131l","map_theme_age_2":"< 2 y\u0131l","map_theme_age_4":"< 1 ay","map_theme_type":"Kamera tipi","map_theme_score":"Kalite skoru","metadata_general_copy_id":"ID Kopyala","metadata_general_copy_picid":"Resim ID kopyala","metadata_general_author":"Yazar","metadata_general_date":"Yakalama tarihi","metadata_general_instance":"K\xf6ken \xf6rne\u011fi","metadata_camera_focal_length":"Odak uzakl\u0131\u011f\u0131","metadata_location_orientation":"Y\xf6n","metadata_location_copy":"Kopyala {v}","metadata_location_precision":"Konumland\u0131rma hassasiyeti","metadata_quality_help":"Kalite Puan\u0131 hakk\u0131nda daha fazla bilgi edinin","metadata_quality_score":"K\xfcresel skor","metadata_quality_gps_score":"Pozisyon skoru","metadata_quality_missing":"resimde herhangi bir de\u011fer belirtilmemi\u015f","metadata_exif_doc":"D\xf6k\xfcman\u0131n EXIF etiketleri","semantics_tags":"{nb} etiketler","semantics_features":"Resim \xf6zellikleri","semantics_features_none":"Bu resimde hen\xfcz hi\xe7bir \xf6zellik \xe7izilmedi.","semantics_features_default_title":"Etiket {nb}","semantics_value_doc":"Bu etiket hakk\u0131nda daha fazla bilgi edinin","semantics_features_subtitle":"{nb} ili\u015fkili \xf6zellikler","semantics_key":"Anahtar","semantics_key_doc":"Bu anahtar hakk\u0131nda daha fazla bilgi edinin","semantics_qualifiers":"Niteleyiciler","semantics_draw_annotation":"Resmin \xfczerine eklemek istedi\u011finiz nesneyi \xe7izebilirsiniz (Opsiyonel).","semantics_login_needed":"Resim etiketlerini veya \xf6zelliklerini d\xfczenlemek i\xe7in Panoramax {n} \xf6rne\u011finde oturum a\xe7man\u0131z gerekir. Oturum a\xe7mak istiyor musunuz?","report_email_placeholder":"\u0130ste\u011fe ba\u011fl\u0131","semantics_add_annotation":"Yeni bir etiket ekle","semantics_erase_annotation":"\xc7izilmi\u015f \xf6zelli\u011fi sil","semantics_doc":"Yard\u0131m","semantics_doc_title":"Etiketler hakk\u0131nda","semantics_show_annotations":"Resim \xf6zelliklerini g\xf6r\xfcnt\xfcle","semantics_hide_annotations":"Resim \xf6zelliklerini gizle","semantics_zero_annotations":"Bu resimde hi\xe7bir \xf6zellik \xe7izilmedi","report":"Rapor et","report_auth":"Bu rapor \\"{a}\\" hesab\u0131n\u0131z kullan\u0131larak g\xf6nderilecektir","report_nature_label":"Sorunun nedeni","semantics_doc_info3":"Baz\u0131 nesneler yapay zeka ile otomatik olarak alg\u0131lan\u0131yor: kalite garanti edilmiyor.","semantics_doc_link":"Etiketler hakk\u0131nda daha fazla bilgi edinin","report_whole_sequence":"Bu t\xfcm sekans\u0131 ilgilendiriyor","report_details":"Ek ayr\u0131nt\u0131lar","report_details_placeholder":"\u0130ste\u011fe ba\u011fl\u0131 olarak sorunla ilgili ayr\u0131nt\u0131lar\u0131 ekleyebilirsiniz","report_email":"Eposta adresin","metadata_exif_doc_title":"EXIF ve XMP etiket tan\u0131mlar\u0131 hakk\u0131nda tam ayr\u0131nt\u0131lar i\xe7in Exiv2 belgelerine gidin","report_failure":"{e} raporu olu\u015fturulurken bir hata olu\u015ftu. L\xfctfen daha sonra tekrar deneyin.","error_psv":"Foto\u011fraf K\xfcresi G\xf6r\xfcnt\xfcleyicisi d\xfczg\xfcn y\xfcklenmiyor","picture_360_long":"Panoramic resim","report_success":"Rapor ba\u015far\u0131yla g\xf6nderildi. En k\u0131sa s\xfcrede incelenecektir.","filter_qualityscore":"Kalite skoru","map_theme_age_3":"< 1 y\u0131l","metadata_location_coordinates":"Koordinatlar (boylam, enlen)","semantics_doc_info2":"Resimdeki nesneleri de \xe7izebilirsiniz: yol i\u015faretleri, \u015fehir ekipmanlar\u0131... G\xf6rd\xfcklerinizi mevcut etiketleri kullanarak i\u015faretleyin. Gerekirse kendi etiketlerinizi de olu\u015fturabilirsiniz.","map_background_aerial":"Havadan","qualityscore_doc_3":"GPS hassasiyeti ve g\xf6r\xfcnt\xfc \xe7\xf6z\xfcn\xfcrl\xfc\u011f\xfcne g\xf6re hesaplan\u0131r. Profesyonel bir sistem A, 360\xb0 aksiyon kameras\u0131 B ve ak\u0131ll\u0131 telefon C/D/E derecelendirmesine sahip olacakt\u0131r.","metadata_location_copy_more":"Daha fazla koordinat kopyalama se\xe7ene\u011fi","report_submit":"G\xf6nder","qualityscore_doc_2":"Not, kullan\u0131c\u0131lara A/B/C/D/E puan\u0131 (A en iyi, E en k\xf6t\xfc) \u015feklinde g\xf6sterilir ve bu \xf6l\xe7ek \xfczerinden grafiksel olarak g\xf6sterilir:","semantics_doc_info1":"Etiketler kullanarak bir foto\u011fraf\u0131n ba\u011flam\u0131n\u0131 olu\u015fturun. transport=car etiketini kullanarak foto\u011fraf\u0131 araba ile \xe7ekilmi\u015f olarak etiketleyebilirsiniz.","qualityscore_doc_1":"Panoramax, her foto\u011fraf i\xe7in bir Kalite Puan\u0131 sunar. Kolay harita filtrelemesi ve y\xfcksek kaliteli foto\u011fraflar\u0131n kapsaml\u0131 bir \u015fekilde g\xf6r\xfcnt\xfclenmesini sa\u011flar.","metadata_camera_make":"Olu\u015ftur","semantics_wikidata_properties":{"P31":"\xf6rne\u011fi","P279":"alt s\u0131n\u0131f\u0131","P361":"par\xe7as\u0131"},"semantics_editor_error":"S\xf6zdizimi ge\xe7ersiz. Etiketleriniz \u015f\xf6yle g\xf6r\xfcnebilir:\\nkey=value\\nprefix|key=value\\nprefix|key[qualif_key=qualif_val]=value\\n\\nMaksimum anahtar uzunlu\u011fu 256 karakter, maksimum de\u011fer uzunlu\u011fu 2048 karakterdir.","semantics_send_fail":"De\u011fi\u015fiklikleriniz kaydedilemedi, l\xfctfen daha sonra tekrar deneyin","semantics_editor_example":"key=value\\nprefix|key=value","semantics_edit":"Nitelikleri d\xfczenle","semantics_undo":"D\xfczenlemelerinizi iptal edin","semantics_sequence_tags":"Sekans etiketi","semantics_picture_tags":"Resim etiketi","semantics_annotation_tags":"Nesne etiketi","filter_gps_precision_lessthan":"{n} metreden az","filter_gps_precision_morethan":"{n} metreden fazla","filter_gps_precision":"Konum hassasiyeti","filter_gps_precision_between":"{n1} ile {n2} metre aras\u0131nda","map_theme_gps":"Konum hassasiyeti"},"maplibre":{"GeolocateControl.FindMyLocation":"Konumu bul","GeolocateControl.LocationNotAvailable":"Lokasyon mevcut de\u011fil"},"map":{"thumbnail":"\xdczerine gelinen k\xfc\xe7\xfck resim","not_public":"Kamuya a\xe7\u0131k de\u011fil","slow_loading":"Haritan\u0131n y\xfcklenmesi yava\u015f ve bozuk g\xf6r\xfcnebilir","map_data":"{m} temelli harita","loading":"Y\xfckleniyor\u2026","more_panoramax":"Panoramax hakk\u0131nda daha fazla bilgi edinin"}}')},8230:ae=>{"use strict";ae.exports=JSON.parse('{"psv":{"twoFingers":"\u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0439\u0442\u0435 \u0434\u0432\u0430 \u043f\u0430\u043b\u044c\u0446\u0456 \u0434\u043b\u044f \u043d\u0430\u0432\u0456\u0433\u0430\u0446\u0456\u0457","ctrlZoom":"\u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0439\u0442\u0435 \u043a\u043e\u043c\u0431\u0456\u043d\u0430\u0446\u0456\u044e \u043a\u043b\u0430\u0432\u0456\u0448 Ctrl + \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0430, \u0449\u043e\u0431 \u0437\u0431\u0456\u043b\u044c\u0448\u0438\u0442\u0438 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","loadError":"\u041f\u0430\u043d\u043e\u0440\u0430\u043c\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435 \u0431\u0443\u0442\u0438 \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u0430"},"maplibre":{"GeolocateControl.FindMyLocation":"\u0417\u043d\u0430\u0439\u0442\u0438 \u043c\u043e\u0454 \u043c\u0456\u0441\u0446\u0435\u0437\u043d\u0430\u0445\u043e\u0434\u0436\u0435\u043d\u043d\u044f","GeolocateControl.LocationNotAvailable":"\u041c\u0456\u0441\u0446\u0435\u0437\u043d\u0430\u0445\u043e\u0434\u0436\u0435\u043d\u043d\u044f \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0435"},"pnx":{"zoomOut":"\u0417\u043c\u0435\u043d\u0448\u0438\u0442\u0438","zoom":"\u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0443\u0432\u0430\u043d\u043d\u044f","zoomIn":"\u0417\u0431\u0456\u043b\u044c\u0448\u0438\u0442\u0438","moveDown":"\u041f\u0435\u0440\u0435\u043c\u0456\u0441\u0442\u0438\u0442\u0438 \u0432\u043d\u0438\u0437","moveLeft":"\u0420\u0443\u0445\u0430\u0442\u0438\u0441\u044f \u043b\u0456\u0432\u043e\u0440\u0443\u0447","moveUp":"\u041f\u0435\u0440\u0435\u043c\u0456\u0441\u0442\u0438\u0442\u0438 \u0432\u0433\u043e\u0440\u0443","moveMiddle":"\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u0438\u0439 \u0432\u0438\u0434","moveRight":"\u041f\u0435\u0440\u0435\u043c\u0456\u0441\u0442\u0438\u0442\u0438\u0441\u044f \u0432\u043f\u0440\u0430\u0432\u043e","expand":"\u0420\u043e\u0437\u0433\u043e\u0440\u043d\u0443\u0442\u0438","show_psv":"\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u0434\u0430\u0447 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c","show_map":"\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u043a\u0430\u0440\u0442\u0443","minimize":"\u0421\u0445\u043e\u0432\u0430\u0442\u0438 \u0446\u0435\u0439 \u0432\u0456\u0434\u0436\u0435\u0442, \u0432\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u0439\u043e\u0433\u043e \u0437\u043d\u043e\u0432\u0443 \u0437\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u043e\u044e \u043a\u043d\u043e\u043f\u043a\u0438 \u0432 \u043d\u0438\u0436\u043d\u044c\u043e\u043c\u0443 \u043b\u0456\u0432\u043e\u043c\u0443 \u043a\u0443\u0442\u0456","minimize_short":"\u041f\u0440\u0438\u0445\u043e\u0432\u0430\u0442\u0438","options":"\u041e\u043f\u0446\u0456\u0457","filters":"\u0424\u0456\u043b\u044c\u0442\u0440\u0438","layers":"\u0428\u0430\u0440\u0438","search":"\u041f\u043e\u0448\u0443\u043a","search_empty":"\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0438 \u043d\u0435 \u0437\u043d\u0430\u0439\u0434\u0435\u043d\u0456","search_user":"\u041f\u043e\u0448\u0443\u043a \u0456\u043c\u0435\u043d\u0456 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u2026","share_links":"\u041b\u0456\u043d\u043a\u0438","share_image":"HD-\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","share_rss":"RSS-\u043a\u0430\u043d\u0430\u043b","share_embed":"\u0412\u0431\u0443\u0434\u0443\u0432\u0430\u0442\u0438 \u043d\u0430 \u0441\u0432\u0456\u0439 \u0432\u0435\u0431-\u0441\u0430\u0439\u0442","share_embed_docs":"\u0414\u0456\u0437\u043d\u0430\u0439\u0442\u0435\u0441\u044f \u0431\u0456\u043b\u044c\u0448\u0435 \u043f\u0440\u043e \u043a\u043e\u043d\u0444\u0456\u0433\u0443\u0440\u0430\u0446\u0456\u044e \u0432\u0431\u0443\u0434\u043e\u0432\u0443\u0432\u0430\u043d\u043d\u044f","share_print":"\u0414\u0440\u0443\u043a","panoramax":"Panoramax","copy":"\u041a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438","copied":"\u0421\u043a\u043e\u043f\u0456\u0439\u043e\u0432\u0430\u043d\u043e","error":"\u0423 \u043d\u0430\u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u2026","error_click":"\u041f\u0440\u043e\u0434\u043e\u0432\u0436\u0438\u0442\u0438","error_retry":"\u0411\u0443\u0434\u044c \u043b\u0430\u0441\u043a\u0430, \u0441\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u043f\u0456\u0437\u043d\u0456\u0448\u0435","sequence_play":"\u0412\u0456\u0434\u0442\u0432\u043e\u0440\u0456\u0442\u044c \u0446\u044e \u043f\u043e\u0441\u043b\u0456\u0434\u043e\u0432\u043d\u0456\u0441\u0442\u044c","sequence_pause":"\u041f\u043e\u0441\u043b\u0456\u0434\u043e\u0432\u043d\u0456\u0441\u0442\u044c \u043f\u0430\u0443\u0437","sequence_prev":"\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u0454 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u0432 \u043f\u043e\u0441\u043b\u0456\u0434\u043e\u0432\u043d\u043e\u0441\u0442\u0456","sequence_more":"\u0411\u0456\u043b\u044c\u0448\u0435 \u0432\u0430\u0440\u0456\u0430\u043d\u0442\u0456\u0432 \u0433\u0440\u0438","legend_license":"\u041b\u0456\u0446\u0435\u043d\u0437\u0456\u044f: {l}","legend_title":"\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u0434\u0435\u0442\u0430\u043b\u0456 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","id":"iD","geo_uri":"\u0417\u043e\u0432\u043d\u0456\u0448\u043d\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0430","josm":"JOSM","loading_labels_serious":["\ud83d\uddfa\ufe0f \u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f \u0434\u0430\u043d\u0438\u0445 \u043a\u0430\u0440\u0442\u0438","\ud83d\udda5\ufe0f \u0417\u0430\u043f\u0438\u0442 API","\ud83d\uddbc\ufe0f \u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f \u043c\u0456\u043d\u0456\u0430\u0442\u044e\u0440","\ud83d\udd0d \u0410\u043d\u0430\u043b\u0456\u0437 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u0438\u0445 EXIF","\ud83c\udfd8\ufe0f 3D-\u0432\u0456\u0437\u0443\u0430\u043b\u0456\u0437\u0430\u0446\u0456\u044f","\ud83d\udcf7 \u0406\u043d\u0456\u0446\u0456\u0430\u043b\u0456\u0437\u0430\u0446\u0456\u044f 360\xb0-\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c","\ud83d\udfe0 \u0411\u0430\u043b\u0430\u043d\u0441\u0443\u0432\u0430\u043d\u043d\u044f \u043a\u043e\u043b\u044c\u043e\u0440\u0456\u0432","\ud83d\udcaf \u041e\u0431\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044f \u043f\u043e\u043a\u0430\u0437\u043d\u0438\u043a\u0430 \u044f\u043a\u043e\u0441\u0442\u0456 \xa9","\ud83d\udce1 \u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f \u043e\u043d\u043e\u0432\u043b\u0435\u043d\u044c","\ud83c\udf0d \u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0456\u0432 \u043a\u0430\u0440\u0442\u0438","\ud83d\udcf8 \u041e\u0431\u0440\u043e\u0431\u043a\u0430 \u0442\u0456\u043d\u0435\u0439"],"expand_info":"\u0417\u0440\u043e\u0431\u0438\u0442\u0438 \u0432\u0456\u0434\u0436\u0435\u0442 \u0432\u0438\u0434\u0438\u043c\u0438\u043c \u043d\u0430 \u0432\u0441\u0456\u0439 \u0441\u0442\u043e\u0440\u0456\u043d\u0446\u0456","search_address":"\u041f\u043e\u0448\u0443\u043a \u0437\u0430 \u0430\u0434\u0440\u0435\u0441\u043e\u044e, \u043c\u0456\u0441\u0442\u043e\u043c\u2026","sequence_speed":"\u0428\u0432\u0438\u0434\u043a\u0456\u0441\u0442\u044c \u0433\u0440\u0430\u0432\u0446\u044f","share_rss_title":"RSS-\u043a\u0430\u043d\u0430\u043b \u043d\u043e\u0432\u0438\u0445 \u043f\u043e\u0441\u043b\u0456\u0434\u043e\u0432\u043d\u043e\u0441\u0442\u0435\u0439 \u0443 \u043f\u043e\u0442\u043e\u0447\u043d\u0456\u0439 \u0432\u0438\u0434\u0438\u043c\u0456\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0456 \u043a\u0430\u0440\u0442\u0438","whats_panoramax":"Panoramax \u2014 \u0446\u0435 \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0456\u0447\u043d\u0430 \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u0438\u0445 \u0434\u043b\u044f \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c \u0442\u0435\u0440\u0438\u0442\u043e\u0440\u0456\u0439.","share":"\u041f\u043e\u0434\u0456\u043b\u0438\u0442\u0438\u0441\u044f","share_page":"\u041f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u043d\u0430 \u0446\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443","sequence_next":"\u041d\u0430\u0441\u0442\u0443\u043f\u043d\u0435 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u0432 \u043f\u043e\u0441\u043b\u0456\u0434\u043e\u0432\u043d\u043e\u0441\u0442\u0456","contribute_id":"\u0414\u043e\u043b\u0443\u0447\u0456\u0442\u044c\u0441\u044f \u0434\u043e OpenStreetMap \u0437\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u043e\u044e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 iD","josm_live":"\u0423\u0432\u0456\u043c\u043a\u043d\u0443\u0442\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u0443 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0456\u0437\u0430\u0446\u0456\u044e JOSM \u043f\u0456\u0434 \u0447\u0430\u0441 \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c","loading_labels_fun":["\ud83e\udd8c \u0412\u0438\u044f\u0432\u043b\u0435\u043d\u043d\u044f \u0437\u043d\u0430\u043a\u0456\u0432 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0443 \u0434\u043b\u044f \u043e\u043b\u0435\u043d\u0456\u0432","\ud83d\ude98 \u041f\u043e\u0448\u0443\u043a \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0456\u043b\u044f Panoramax \xa9","\u2615 \u0406\u043d\'\u0454\u043a\u0446\u0456\u0457 \u043a\u043e\u0444\u0435\u0457\u043d\u0443","\ud83d\ude00 \u041f\u043e\u0441\u043c\u0456\u0445\u043d\u0438\u0441\u044f, \u0442\u0438 \u043d\u0430 \u043a\u0430\u0440\u0442\u0456!","\ud83d\udc08 \u0414\u0456\u043b\u044e\u0441\u044f \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0456\u044f\u043c\u0438 \u043a\u043e\u0442\u0456\u0432","\ud83d\ude34 \u0417\u043c\u0435\u043d\u0448\u0435\u043d\u043d\u044f \u043f\u0440\u043e\u043a\u0440\u0430\u0441\u0442\u0438\u043d\u0430\u0446\u0456\u0457","\ud83e\uded6 \u0417\u0430\u0432\u0430\u0440\u044e\u0432\u0430\u043d\u043d\u044f \u0447\u0430\u044e","\ud83d\udc27 \u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0442\u044f \u0432\u0438\u0445\u0456\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0443","\ud83d\ude87 \u0406\u043d\u0434\u0435\u043a\u0441\u0443\u0432\u0430\u043d\u043d\u044f \u0441\u0442\u0430\u043d\u0446\u0456\u0439 \u043c\u0435\u0442\u0440\u043e","\ud83e\uddf9 \u041e\u0447\u0438\u0449\u0435\u043d\u043d\u044f \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u0438\u0445","\ud83d\ude92 \u041d\u0430\u0434\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0456\u0439 \u043f\u043e\u0436\u0435\u0436\u043d\u043e\u0457 \u0441\u0442\u0430\u043d\u0446\u0456\u0457","\ud83d\udeb2 \u041e\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044f \u0437\u0435\u043b\u0435\u043d\u0438\u0445 \u0441\u0442\u0435\u0436\u043e\u043a","\ud83d\ude89 \u041e\u0433\u043b\u044f\u0434 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0438 \u0441\u0442\u0430\u043d\u0446\u0456\u0457","\ud83d\udef0\ufe0f \u041f\u043e\u0448\u0443\u043a \u0441\u0443\u043f\u0443\u0442\u043d\u0438\u043a\u0456\u0432","\ud83d\udc65 \u041f\u0438\u0441\u044c\u043c\u0435\u043d\u043d\u0438\u0446\u044c\u043a\u0456 \u043f\u0435\u0440\u0441\u043e\u043d\u0438","\ud83d\udc1f \u041f\u043e\u0448\u0443\u043a \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0456\u0432 \u0447\u0456\u043f\u0441\u0456\u0432","\ud83e\uddd1\u200d\ud83d\udcbb \u0406\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043d\u0430\u043b\u0430\u0433\u043e\u0434\u0436\u0435\u043d\u043d\u044f","\ud83d\udcc8 \u0417\u0431\u0456\u043b\u044c\u0448\u0435\u043d\u043d\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438","\ud83e\udd16 \u0412\u0438\u0432\u0447\u0435\u043d\u043d\u044f \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0438","\ud83c\udfa8 \u0420\u0435\u0434\u0438\u0437\u0430\u0439\u043d \u0456\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443","\ud83d\udcc5 \u041f\u043b\u0430\u043d\u0443\u0432\u0430\u043d\u043d\u044f \u0432\u0435\u0447\u0456\u0440\u043e\u043a \u0437 \u0444\u043e\u0442\u043e\u043c\u0435\u043f\u0456\u043d\u0433\u043e\u043c","\ud83e\uddc0 \u0412\u0438\u0437\u0440\u0456\u043b\u0438\u0439 \u0447\u0435\u0434\u0434\u0435\u0440","\ud83c\udf04 \u0420\u043e\u0437\u0440\u0430\u0445\u0443\u043d\u043e\u043a \u043a\u043e\u0440\u043d\u0443\u043e\u043b\u044c\u0441\u044c\u043a\u043e\u0457 \u0441\u043e\u043d\u044f\u0447\u043d\u043e\u0457 \u0435\u043d\u0435\u0440\u0433\u0456\u0457","\ud83c\udf0a \u0412\u0438\u043c\u0456\u0440\u044e\u0432\u0430\u043d\u043d\u044f \u043f\u0440\u0438\u043f\u043b\u0438\u0432\u0456\u0432"],"error_psv":"\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u0430 \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u0434\u0443 \u0444\u043e\u0442\u043e\u0441\u0444\u0435\u0440 \u043d\u0435 \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0443\u0454\u0442\u044c\u0441\u044f \u043d\u0430\u043b\u0435\u0436\u043d\u0438\u043c \u0447\u0438\u043d\u043e\u043c","error_pic":"\u0417\u0430\u043f\u0438\u0442\u0430\u043d\u0435 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u043d\u0435 \u0437\u043d\u0430\u0439\u0434\u0435\u043d\u043e","error_nopic":"\u0423 \u0432\u043a\u0430\u0437\u0430\u043d\u043e\u043c\u0443 \u043c\u0456\u0441\u0446\u0456 \u043d\u0435\u043c\u0430\u0454 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","error_api":"\u0421\u0435\u0440\u0432\u0435\u0440 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0438\u0439","error_webgl":"\u0412\u0430\u0448 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043d\u0435 \u043f\u0456\u0434\u0442\u0440\u0438\u043c\u0443\u0454 WebGL","error_josm":"JOSM \u043d\u0435 \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u0430\u0454, \u0447\u0438 \u043f\u0440\u0430\u0446\u044e\u0454 \u0432\u0456\u043d \u0456 \u0447\u0438 \u0443\u0432\u0456\u043c\u043a\u043d\u0435\u043d\u043e \u0432\u0456\u0434\u0434\u0430\u043b\u0435\u043d\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f?","error_api_compatibility":"\u0421\u0435\u0440\u0432\u0435\u0440 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c \u043d\u0435 \u0441\u0443\u043c\u0456\u0441\u043d\u0438\u0439 \u0437 \u0446\u0456\u0454\u044e \u0432\u0435\u0440\u0441\u0456\u0454\u044e \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u0434\u0430\u0447\u0430","filter_date":"\u0414\u0430\u0442\u0430","filter_date_1month":"1 \u043c\u0456\u0441\u044f\u0446\u044c","filter_date_6months":"6 \u043c\u0456\u0441\u044f\u0446\u0456\u0432","filter_date_1year":"1 \u0440\u0456\u043a","filter_user":"\u041a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447","filter_user_mypics":"\u041c\u043e\u0457 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0456\u0457","filter_picture":"\u0422\u0438\u043f \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","filter_zoom_in":"\u0417\u0431\u0456\u043b\u044c\u0448\u0442\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431 \u043a\u0430\u0440\u0442\u0438, \u0449\u043e\u0431 \u043f\u043e\u0431\u0430\u0447\u0438\u0442\u0438 \u0446\u0435\u0439 \u0444\u0456\u043b\u044c\u0442\u0440","picture_all":"\u0423\u0441\u0456","picture_flat":"\u041a\u043b\u0430\u0441\u0438\u0447\u043d\u0438\u0439","picture_360":"360\xb0","picture_flat_long":"\u041a\u043b\u0430\u0441\u0438\u0447\u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u0430","picture_360_long":"\u041f\u0430\u043d\u043e\u0440\u0430\u043c\u043d\u0435 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","filter_qualityscore":"\u041f\u043e\u043a\u0430\u0437\u043d\u0438\u043a \u044f\u043a\u043e\u0441\u0442\u0456","filter_qualityscore_help":"\u041d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c, \u0449\u043e\u0431 \u0443\u0432\u0456\u043c\u043a\u043d\u0443\u0442\u0438 \u0430\u0431\u043e \u0432\u0438\u043c\u043a\u043d\u0443\u0442\u0438","qualityscore_title":"\u041f\u0440\u043e \u043f\u043e\u043a\u0430\u0437\u043d\u0438\u043a \u044f\u043a\u043e\u0441\u0442\u0456","qualityscore_doc_1":"Panoramax \u043f\u0440\u043e\u043f\u043e\u043d\u0443\u0454 \u043e\u0446\u0456\u043d\u043a\u0443 \u044f\u043a\u043e\u0441\u0442\u0456 \u0434\u043b\u044f \u043a\u043e\u0436\u043d\u043e\u0433\u043e \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f. \u0426\u0435 \u0434\u043e\u0437\u0432\u043e\u043b\u044f\u0454 \u043b\u0435\u0433\u043a\u043e \u0444\u0456\u043b\u044c\u0442\u0440\u0443\u0432\u0430\u0442\u0438 \u043a\u0430\u0440\u0442\u0438 \u0442\u0430 \u043f\u043e\u0432\u043d\u0435 \u0432\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0438\u0445 \u0432\u0438\u0441\u043e\u043a\u043e\u044f\u043a\u0456\u0441\u043d\u0438\u0445 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c.","qualityscore_doc_2":"\u041e\u0446\u0456\u043d\u043a\u0430 \u0432\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0430\u0454\u0442\u044c\u0441\u044f \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u043c \u0443 \u0432\u0438\u0433\u043b\u044f\u0434\u0456 \u0431\u0430\u043b\u0456\u0432 A/B/C/D/E (A \u2013 \u043d\u0430\u0439\u043a\u0440\u0430\u0449\u0438\u0439, E \u2013 \u043d\u0430\u0439\u0433\u0456\u0440\u0448\u0438\u0439) \u0442\u0430 \u0432\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0430\u0454\u0442\u044c\u0441\u044f \u0433\u0440\u0430\u0444\u0456\u0447\u043d\u043e \u0437\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u043e\u044e \u0446\u0456\u0454\u0457 \u0448\u043a\u0430\u043b\u0438:","qualityscore_doc_3":"\u0412\u0456\u043d \u0440\u043e\u0437\u0440\u0430\u0445\u043e\u0432\u0443\u0454\u0442\u044c\u0441\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0456 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0456 GPS \u0442\u0430 \u0440\u043e\u0437\u0434\u0456\u043b\u044c\u043d\u043e\u0457 \u0437\u0434\u0430\u0442\u043d\u043e\u0441\u0442\u0456 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f. \u041f\u0440\u043e\u0444\u0435\u0441\u0456\u0439\u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043c\u0430\u0442\u0438\u043c\u0435 \u0440\u0435\u0439\u0442\u0438\u043d\u0433 A, \u0435\u043a\u0448\u043d-\u043a\u0430\u043c\u0435\u0440\u0430 \u043d\u0430 360\xb0 \u2014 \u0440\u0435\u0439\u0442\u0438\u043d\u0433 B, \u0430 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d \u2014 \u0440\u0435\u0439\u0442\u0438\u043d\u0433 C/D/E.","qualityscore_doc_link":"\u0414\u0456\u0437\u043d\u0430\u0439\u0442\u0435\u0441\u044f \u0431\u0456\u043b\u044c\u0448\u0435 \u043f\u0440\u043e \u043f\u043e\u043a\u0430\u0437\u043d\u0438\u043a \u044f\u043a\u043e\u0441\u0442\u0456","map_background":"\u0424\u043e\u043d \u043a\u0430\u0440\u0442\u0438","map_background_aerial":"\u041f\u043e\u0432\u0456\u0442\u0440\u044f\u043d\u0438\u0439","map_background_streets":"\u0412\u0443\u043b\u0438\u0446\u0456","map_theme":"\u0422\u0435\u043c\u0430 \u043a\u0430\u0440\u0442\u0438","map_theme_default":"\u041a\u043b\u0430\u0441\u0438\u0447\u043d\u0438\u0439","map_theme_age":"\u0414\u0430\u0442\u0430 \u0437\u0439\u043e\u043c\u043a\u0438","map_theme_age_1":"> 2 \u0440\u043e\u043a\u0456\u0432","map_theme_age_2":"< 2 \u0440\u043e\u043a\u0456\u0432","map_theme_age_3":"< 1 \u0440\u043e\u043a\u0443","map_theme_age_4":"< 1 \u043c\u0456\u0441\u044f\u0446\u044f","map_theme_type":"\u0422\u0438\u043f \u043a\u0430\u043c\u0435\u0440\u0438","map_theme_score":"\u041f\u043e\u043a\u0430\u0437\u043d\u0438\u043a \u044f\u043a\u043e\u0441\u0442\u0456","contrast":"\u0423\u0432\u0456\u043c\u043a\u043d\u0443\u0442\u0438 \u0432\u0438\u0449\u0443 \u043a\u043e\u043d\u0442\u0440\u0430\u0441\u0442\u043d\u0456\u0441\u0442\u044c \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","metadata":"\u041c\u0435\u0442\u0430\u0434\u0430\u043d\u0456 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","metadata_summary":"\u041a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u0437\u043c\u0456\u0441\u0442","metadata_general_copy_id":"\u041a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438 \u0456\u0434\u0435\u043d\u0442\u0438\u0444\u0456\u043a\u0430\u0442\u043e\u0440","metadata_general_picid":"\u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","metadata_general_seqid":"\u041f\u043e\u0441\u043b\u0456\u0434\u043e\u0432\u043d\u0456\u0441\u0442\u044c","metadata_general_copy_picid":"\u041a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438 \u0456\u0434\u0435\u043d\u0442\u0438\u0444\u0456\u043a\u0430\u0442\u043e\u0440 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","metadata_general_picid_link":"\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u0434\u043e JSON-\u043e\u043f\u0438\u0441\u0443 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","metadata_general_seqid_link":"\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u0434\u043e JSON-\u043e\u043f\u0438\u0441\u0443 \u043f\u043e\u0441\u043b\u0456\u0434\u043e\u0432\u043d\u043e\u0441\u0442\u0456","metadata_general_author":"\u0410\u0432\u0442\u043e\u0440","metadata_general_license":"\u041b\u0456\u0446\u0435\u043d\u0437\u0456\u044f","metadata_general_license_link":"\u0414\u0438\u0432. \u043f\u043e\u0432\u043d\u0438\u0439 \u043e\u043f\u0438\u0441 \u043b\u0456\u0446\u0435\u043d\u0437\u0456\u0457","metadata_general_date":"\u0414\u0430\u0442\u0430 \u0437\u0439\u043e\u043c\u043a\u0438","metadata_camera":"\u041a\u0430\u043c\u0435\u0440\u0430","metadata_camera_make":"\u0417\u0440\u043e\u0431\u0438\u0442\u0438","metadata_general_instance":"\u041f\u043e\u0447\u0430\u0442\u043a\u043e\u0432\u0438\u0439 \u0435\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440","metadata_camera_model":"\u041c\u043e\u0434\u0435\u043b\u044c","metadata_camera_type":"\u0422\u0438\u043f","metadata_camera_resolution":"\u0420\u043e\u0437\u0434\u0456\u043b\u044c\u043d\u0430 \u0437\u0434\u0430\u0442\u043d\u0456\u0441\u0442\u044c","metadata_location":"\u041f\u043e\u0437\u0438\u0446\u0456\u044f","metadata_location_coordinates":"\u041a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0438 (\u0434\u043e\u0432\u0433\u043e\u0442\u0430, \u0448\u0438\u0440\u043e\u0442\u0430)","metadata_location_orientation":"\u041d\u0430\u043f\u0440\u044f\u043c\u043e\u043a","metadata_location_precision":"\u0422\u043e\u0447\u043d\u0456\u0441\u0442\u044c \u043f\u043e\u0437\u0438\u0446\u0456\u043e\u043d\u0443\u0432\u0430\u043d\u043d\u044f","metadata_location_copy":"\u041a\u043e\u043f\u0456\u044f {v}","metadata_location_copy_more":"\u0411\u0456\u043b\u044c\u0448\u0435 \u043e\u043f\u0446\u0456\u0439 \u043a\u043e\u043f\u0456\u044e\u0432\u0430\u043d\u043d\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442","metadata_quality":"\u042f\u043a\u0456\u0441\u0442\u044c","metadata_quality_help":"\u0414\u0456\u0437\u043d\u0430\u0439\u0442\u0435\u0441\u044f \u0431\u0456\u043b\u044c\u0448\u0435 \u043f\u0440\u043e \u043f\u043e\u043a\u0430\u0437\u043d\u0438\u043a \u044f\u043a\u043e\u0441\u0442\u0456","metadata_quality_score":"\u0413\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0438\u0439 \u0431\u0430\u043b","metadata_quality_gps_score":"\u041e\u0446\u0456\u043d\u043a\u0430 \u043f\u043e\u0437\u0438\u0446\u0456\u043e\u043d\u0443\u0432\u0430\u043d\u043d\u044f","metadata_quality_resolution_score":"\u041e\u0446\u0456\u043d\u043a\u0430 \u0440\u043e\u0437\u0434\u0456\u043b\u044c\u043d\u043e\u0457 \u0437\u0434\u0430\u0442\u043d\u043e\u0441\u0442\u0456","metadata_exif":"EXIF","metadata_exif_name":"\u0422\u0435\u0433","metadata_exif_value":"\u0417\u043d\u0430\u0447\u0435\u043d\u043d\u044f","metadata_exif_doc":"\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0456\u044f \u0434\u043b\u044f \u0442\u0435\u0433\u0456\u0432 EXIF","metadata_exif_doc_title":"\u041f\u0435\u0440\u0435\u0439\u0434\u0456\u0442\u044c \u0434\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0456\u0457 Exiv2, \u0449\u043e\u0431 \u043e\u0442\u0440\u0438\u043c\u0430\u0442\u0438 \u043f\u043e\u0432\u043d\u0443 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044e \u043f\u0440\u043e \u0432\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f \u0442\u0435\u0433\u0456\u0432 EXIF \u0442\u0430 XMP","semantics_title":"\u0422\u0435\u0433\u0438","semantics_tags":"\u0442\u0435\u0433\u0438 {nb}","semantics_features_subtitle":"{nb} \u043f\u043e\u0432\'\u044f\u0437\u0430\u043d\u0456 \u0432\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456","semantics_annotation_tooltip":"\u041d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c, \u0449\u043e\u0431 \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u043d\u0443\u0442\u0438 \u0434\u0435\u0442\u0430\u043b\u0456","semantics_show_all_tags":"\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u0432\u0441\u0456 \u0442\u0435\u0433\u0438","semantics_hide_all_tags":"\u041f\u0440\u0438\u0445\u043e\u0432\u0430\u0442\u0438 \u0432\u0441\u0456 \u0442\u0435\u0433\u0438","semantics_key":"\u041a\u043b\u044e\u0447","semantics_value":"\u0417\u043d\u0430\u0447\u0435\u043d\u043d\u044f","semantics_key_doc":"\u0414\u0456\u0437\u043d\u0430\u0439\u0442\u0435\u0441\u044f \u0431\u0456\u043b\u044c\u0448\u0435 \u043f\u0440\u043e \u0446\u0435\u0439 \u043a\u043b\u044e\u0447","semantics_value_doc":"\u0414\u0456\u0437\u043d\u0430\u0439\u0442\u0435\u0441\u044f \u0431\u0456\u043b\u044c\u0448\u0435 \u043f\u0440\u043e \u0446\u0435\u0439 \u0442\u0435\u0433","semantics_tags_picture":"\u0422\u0435\u0433\u0438 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c","semantics_tags_picture_none":"\u0414\u043b\u044f \u0446\u044c\u043e\u0433\u043e \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u0449\u0435 \u043d\u0435 \u0432\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u0436\u043e\u0434\u043d\u0438\u0445 \u0442\u0435\u0433\u0456\u0432.","semantics_qualifiers":"\u041a\u0432\u0430\u043b\u0456\u0444\u0456\u043a\u0430\u0442\u043e\u0440\u0438","semantics_features":"\u041e\u0441\u043e\u0431\u043b\u0438\u0432\u043e\u0441\u0442\u0456 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","semantics_features_default_title":"\u0422\u0435\u0433 {nb}","semantics_features_none":"\u041d\u0430 \u0446\u044c\u043e\u043c\u0443 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u0456 \u0449\u0435 \u043d\u0435 \u043d\u0430\u043c\u0430\u043b\u044c\u043e\u0432\u0430\u043d\u043e \u0436\u043e\u0434\u043d\u043e\u0457 \u043e\u0441\u043e\u0431\u043b\u0438\u0432\u043e\u0441\u0442\u0456.","semantics_show_annotations":"\u0424\u0443\u043d\u043a\u0446\u0456\u0457 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u043d\u0430 \u0434\u0438\u0441\u043f\u043b\u0435\u0457","metadata_camera_focal_length":"\u0424\u043e\u043a\u0443\u0441\u043d\u0430 \u0432\u0456\u0434\u0441\u0442\u0430\u043d\u044c","metadata_quality_missing":"\u043d\u0430 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u0456 \u043d\u0435 \u0432\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f","semantics_draw_annotation":"\u0412\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u043c\u0430\u043b\u044e\u0432\u0430\u0442\u0438 \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u0438\u0439 \u043e\u0431\'\u0454\u043a\u0442 \u043f\u043e\u0432\u0435\u0440\u0445 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f (\u043d\u0435\u043e\u0431\u043e\u0432\'\u044f\u0437\u043a\u043e\u0432\u043e).","semantics_save_drawn_annotation":"\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438 \u043f\u043e\u0437\u0438\u0446\u0456\u044e","semantics_undo_drawn_annotation":"\u0421\u043a\u0430\u0441\u0443\u0432\u0430\u0442\u0438","semantics_delete_annotation":"\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0446\u0435\u0439 \u043e\u0431\'\u0454\u043a\u0442","semantics_hashtags":"\u0425\u0435\u0448\u0442\u0435\u0433\u0438 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c","semantics_wikidata_properties":{"P31":"\u043f\u0440\u0438\u043a\u043b\u0430\u0434","P279":"\u043f\u0456\u0434\u043a\u043b\u0430\u0441","P361":"\u0447\u0430\u0441\u0442\u0438\u043d\u0430"},"semantics_editor_error":"\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u043d\u0435\u0434\u0456\u0439\u0441\u043d\u0438\u0439. \u0412\u0430\u0448\u0456 \u0442\u0435\u0433\u0438 \u043c\u043e\u0436\u0443\u0442\u044c \u0432\u0438\u0433\u043b\u044f\u0434\u0430\u0442\u0438 \u0442\u0430\u043a:\\n\u043a\u043b\u044e\u0447=\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f\\n\u043f\u0440\u0435\u0444\u0456\u043a\u0441|\u043a\u043b\u044e\u0447=\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f\\n\u043f\u0440\u0435\u0444\u0456\u043a\u0441|\u043a\u043b\u044e\u0447[\u043a\u0432\u0430\u043b\u0456\u0444\u0456\u043a\u0430\u0446\u0456\u0439\u043d\u0438\u0439_\u043a\u043b\u044e\u0447=\u043a\u0432\u0430\u043b\u0456\u0444\u0456\u043a\u0430\u0446\u0456\u0439\u043d\u0435_\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f]=\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f\\n\\n\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430 \u0434\u043e\u0432\u0436\u0438\u043d\u0430 \u043a\u043b\u044e\u0447\u0430 \u2014 256 \u0441\u0438\u043c\u0432\u043e\u043b\u0456\u0432, \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430 \u0434\u043e\u0432\u0436\u0438\u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f \u2014 2048 \u0441\u0438\u043c\u0432\u043e\u043b\u0456\u0432.","semantics_editor_example":"\u043a\u043b\u044e\u0447=\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f\\n\u043f\u0440\u0435\u0444\u0456\u043a\u0441|\u043a\u043b\u044e\u0447=\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f","semantics_edit":"\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0438","semantics_save":"\u0417\u0431\u0435\u0440\u0435\u0436\u0456\u0442\u044c \u0437\u043c\u0456\u043d\u0438","semantics_undo":"\u0421\u043a\u0430\u0441\u0443\u0432\u0430\u0442\u0438 \u0432\u0430\u0448\u0456 \u0437\u043c\u0456\u043d\u0438","semantics_cantsave_invalid":"\u041d\u0435 \u0432\u0434\u0430\u043b\u043e\u0441\u044f \u0437\u0431\u0435\u0440\u0435\u0433\u0442\u0438 \u0437\u043c\u0456\u043d\u0438, \u0432\u0432\u0435\u0434\u0435\u043d\u0456 \u0434\u0430\u043d\u0456 \u043d\u0435\u0434\u0456\u0439\u0441\u043d\u0456","semantics_send_fail":"\u041d\u0435 \u0432\u0434\u0430\u043b\u043e\u0441\u044f \u0437\u0431\u0435\u0440\u0435\u0433\u0442\u0438 \u0437\u043c\u0456\u043d\u0438, \u0441\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u043f\u0456\u0437\u043d\u0456\u0448\u0435","semantics_send_ok":"\u0412\u0430\u0448\u0456 \u0437\u043c\u0456\u043d\u0438 \u0443\u0441\u043f\u0456\u0448\u043d\u043e \u043d\u0430\u0434\u0456\u0441\u043b\u0430\u043d\u043e","report_details":"\u0414\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u0456 \u0434\u0435\u0442\u0430\u043b\u0456","report_details_placeholder":"\u0417\u0430 \u0431\u0430\u0436\u0430\u043d\u043d\u044f\u043c, \u0432\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u043e\u0434\u0430\u0442\u0438 \u0434\u0435\u0442\u0430\u043b\u0456 \u043f\u0440\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443","semantics_zero_annotations":"\u041d\u0430 \u0446\u044c\u043e\u043c\u0443 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u0456 \u043d\u0435\u043c\u0430\u0454 \u043d\u0430\u043c\u0430\u043b\u044c\u043e\u0432\u0430\u043d\u0438\u0445 \u0440\u0438\u0441","semantics_add_annotation":"\u0414\u043e\u0434\u0430\u0442\u0438 \u043d\u043e\u0432\u0438\u0439 \u0442\u0435\u0433","semantics_delete_annotation_confirm":"\u0412\u0438 \u0441\u043f\u0440\u0430\u0432\u0434\u0456 \u0445\u043e\u0447\u0435\u0442\u0435 \u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0446\u0435\u0439 \u0442\u0435\u0433?","semantics_login_needed":"\u0429\u043e\u0431 \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u0442\u0435\u0433\u0438 \u0430\u0431\u043e \u043e\u0431\'\u0454\u043a\u0442\u0438 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c, \u0432\u0430\u043c \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u043e \u0443\u0432\u0456\u0439\u0442\u0438 \u0432 \u0435\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 Panoramax {n}. \u0412\u0438 \u0445\u043e\u0447\u0435\u0442\u0435 \u0443\u0432\u0456\u0439\u0442\u0438?","report":"\u0417\u0432\u0456\u0442","report_auth":"\u0426\u0435\u0439 \u0437\u0432\u0456\u0442 \u0431\u0443\u0434\u0435 \u043d\u0430\u0434\u0456\u0441\u043b\u0430\u043d\u043e \u0437 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u044f\u043c \u0432\u0430\u0448\u043e\u0433\u043e \u043e\u0431\u043b\u0456\u043a\u043e\u0432\u043e\u0433\u043e \u0437\u0430\u043f\u0438\u0441\u0443 \\"{a}\\"","report_nature_label":"\u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0438","report_nature":{"blur_excess":"\u0414\u043e \u043e\u0431\'\u0454\u043a\u0442\u0430 \u0437\u0430\u0441\u0442\u043e\u0441\u043e\u0432\u0430\u043d\u043e \u043d\u0435\u043f\u043e\u0442\u0440\u0456\u0431\u043d\u0435 \u0440\u043e\u0437\u043c\u0438\u0442\u0442\u044f","inappropriate":"\u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u043d\u0435\u0434\u043e\u0440\u0435\u0447\u043d\u0435 (\u043d\u0435 \u0441\u0442\u043e\u0441\u0443\u0454\u0442\u044c\u0441\u044f \u0442\u0435\u043c\u0438, \u043e\u0433\u043e\u043b\u0435\u043d\u0435 \u0442\u0456\u043b\u043e\u2026)","privacy":"\u0412\u0438\u0434\u043d\u043e \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u0438\u0439 \u0448\u043b\u044f\u0445 \u0430\u0431\u043e \u0432\u043b\u0430\u0441\u043d\u0456\u0441\u0442\u044c","mislocated":"\u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u043f\u043e\u0433\u0430\u043d\u043e \u0440\u043e\u0437\u0442\u0430\u0448\u043e\u0432\u0430\u043d\u0435 \u043d\u0430 \u043a\u0430\u0440\u0442\u0456","copyright":"\u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u043f\u043e\u0440\u0443\u0448\u0443\u0454 \u0430\u0432\u0442\u043e\u0440\u0441\u044c\u043a\u0456 \u043f\u0440\u0430\u0432\u0430","other":"\u0411\u0443\u0434\u044c-\u044f\u043a\u0438\u0439 \u0456\u043d\u0448\u0438\u0439 \u0432\u0438\u0434 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0438","picture_low_quality":"\u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u043d\u0438\u0437\u044c\u043a\u043e\u0457 \u044f\u043a\u043e\u0441\u0442\u0456","":"\u0412\u0438\u0431\u0435\u0440\u0456\u0442\u044c \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0438\u2026","blur_missing":"\u0412\u0438\u0434\u043d\u043e \u043e\u0431\u043b\u0438\u0447\u0447\u044f \u043b\u044e\u0434\u0438\u043d\u0438 \u0430\u0431\u043e \u043d\u043e\u043c\u0435\u0440\u043d\u0438\u0439 \u0437\u043d\u0430\u043a \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0456\u043b\u044f"},"report_email":"\u0412\u0430\u0448\u0430 \u0435\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0430 \u0430\u0434\u0440\u0435\u0441\u0430","report_email_placeholder":"\u041d\u0435\u043e\u0431\u043e\u0432\'\u044f\u0437\u043a\u043e\u0432\u043e","report_submit":"\u041d\u0430\u0434\u0456\u0441\u043b\u0430\u0442\u0438","report_success":"\u0417\u0432\u0456\u0442 \u0443\u0441\u043f\u0456\u0448\u043d\u043e \u043d\u0430\u0434\u0456\u0441\u043b\u0430\u043d\u043e. \u0419\u043e\u0433\u043e \u0431\u0443\u0434\u0435 \u0440\u043e\u0437\u0433\u043b\u044f\u043d\u0443\u0442\u043e \u044f\u043a\u043e\u043c\u043e\u0433\u0430 \u0448\u0432\u0438\u0434\u0448\u0435.","report_failure":"\u041f\u0456\u0434 \u0447\u0430\u0441 \u0441\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044f \u0437\u0432\u0456\u0442\u0443 \u0441\u0442\u0430\u043b\u0430\u0441\u044f \u043f\u043e\u043c\u0438\u043b\u043a\u0430: {e}. \u0411\u0443\u0434\u044c \u043b\u0430\u0441\u043a\u0430, \u0441\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u043f\u0456\u0437\u043d\u0456\u0448\u0435.","report_whole_sequence":"\u0426\u0435 \u0441\u0442\u043e\u0441\u0443\u0454\u0442\u044c\u0441\u044f \u0432\u0441\u0456\u0454\u0457 \u043f\u043e\u0441\u043b\u0456\u0434\u043e\u0432\u043d\u043e\u0441\u0442\u0456","report_wait":"\u041d\u0430\u0434\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u0437\u0432\u0456\u0442\u0443\u2026","semantics_save_drawn_annotation_incomplete":"\u041f\u0435\u0440\u0435\u0434 \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u043e\u044e \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u043e \u043d\u0430\u043c\u0430\u043b\u044e\u0432\u0430\u0442\u0438 \u043f\u0440\u044f\u043c\u043e\u043a\u0443\u0442\u043d\u0438\u043a, \u044f\u043a\u0438\u0439 \u043f\u043e\u043c\u0456\u0441\u0442\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u0456","semantics_hide_annotations":"\u041f\u0440\u0438\u0445\u043e\u0432\u0430\u0442\u0438 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u043e\u0431\'\u0454\u043a\u0442\u0456\u0432","semantics_doc":"\u0414\u043e\u043f\u043e\u043c\u043e\u0433\u0430","semantics_doc_title":"\u041f\u0440\u043e \u0442\u0435\u0433\u0438","semantics_erase_annotation":"\u0421\u0442\u0435\u0440\u0442\u0438 \u043d\u0430\u043c\u0430\u043b\u044c\u043e\u0432\u0430\u043d\u0438\u0439 \u0435\u043b\u0435\u043c\u0435\u043d\u0442","semantics_doc_info1":"\u041d\u0430\u0434\u0430\u0439\u0442\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043d\u0430\u0432\u043a\u043e\u043b\u043e \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u0437\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u043e\u044e \u0442\u0435\u0433\u0456\u0432. \u0412\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0437\u043d\u0430\u0447\u0438\u0442\u0438 \u0439\u043e\u0433\u043e \u044f\u043a \u0437\u043d\u044f\u0442\u0435 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0456\u043b\u0435\u043c \u0437\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u043e\u044e \u0442\u0435\u0433\u0443 transport=car.","semantics_doc_info2":"\u0412\u0438 \u0442\u0430\u043a\u043e\u0436 \u043c\u043e\u0436\u0435\u0442\u0435 \u043c\u0430\u043b\u044e\u0432\u0430\u0442\u0438 \u043e\u0431\'\u0454\u043a\u0442\u0438 \u043d\u0430 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u0456: \u0434\u043e\u0440\u043e\u0436\u043d\u0456 \u0437\u043d\u0430\u043a\u0438, \u043c\u0456\u0441\u044c\u043a\u0435 \u043e\u0431\u043b\u0430\u0434\u043d\u0430\u043d\u043d\u044f\u2026 \u041f\u043e\u0437\u043d\u0430\u0447\u0430\u0439\u0442\u0435 \u0442\u0435, \u0449\u043e \u0431\u0430\u0447\u0438\u0442\u0435, \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u044e\u0447\u0438 \u0456\u0441\u043d\u0443\u044e\u0447\u0456 \u0442\u0435\u0433\u0438. \u0417\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u0438 \u0432\u0438 \u0442\u0430\u043a\u043e\u0436 \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0442\u0432\u043e\u0440\u0438\u0442\u0438 \u0441\u0432\u043e\u0457 \u0432\u043b\u0430\u0441\u043d\u0456.","semantics_doc_info3":"\u0414\u0435\u044f\u043a\u0456 \u043e\u0431\'\u0454\u043a\u0442\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0440\u043e\u0437\u043f\u0456\u0437\u043d\u0430\u044e\u0442\u044c\u0441\u044f \u0437\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u043e\u044e \u0448\u0442\u0443\u0447\u043d\u043e\u0433\u043e \u0456\u043d\u0442\u0435\u043b\u0435\u043a\u0442\u0443: \u044f\u043a\u0456\u0441\u0442\u044c \u043d\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0443\u0454\u0442\u044c\u0441\u044f.","semantics_doc_link":"\u0414\u0456\u0437\u043d\u0430\u0439\u0442\u0435\u0441\u044f \u0431\u0456\u043b\u044c\u0448\u0435 \u043f\u0440\u043e \u0442\u0435\u0433\u0438","semantics_sequence_tags":"\u0422\u0435\u0433 \u043f\u043e\u0441\u043b\u0456\u0434\u043e\u0432\u043d\u043e\u0441\u0442\u0456","semantics_picture_tags":"\u0422\u0435\u0433 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","semantics_annotation_tags":"\u0422\u0435\u0433 \u043e\u0431\'\u0454\u043a\u0442\u0430","filter_gps_precision_lessthan":"\u041c\u0435\u043d\u0448\u0435 {n} \u043c\u0435\u0442\u0440\u0456\u0432","filter_gps_precision_morethan":"\u0411\u0456\u043b\u044c\u0448\u0435 {n} \u043c\u0435\u0442\u0440\u0456\u0432","filter_gps_precision_between":"\u0412\u0456\u0434 {n1} \u0434\u043e {n2} \u043c\u0435\u0442\u0440\u0456\u0432"},"map":{"not_public":"\u041d\u0435 \u043f\u0443\u0431\u043b\u0456\u0447\u043d\u043e \u0432\u0438\u0434\u0438\u043c\u0435","map_data":"\u041a\u0430\u0440\u0442\u0430 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0456 {m}","more_panoramax":"\u0414\u0456\u0437\u043d\u0430\u0439\u0442\u0435\u0441\u044f \u0431\u0456\u043b\u044c\u0448\u0435 \u043f\u0440\u043e Panoramax","thumbnail":"\u041c\u0456\u043d\u0456\u0430\u0442\u044e\u0440\u0430 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f, \u043d\u0430 \u044f\u043a\u0435 \u043d\u0430\u0432\u0435\u0434\u0435\u043d\u043e \u043a\u0443\u0440\u0441\u043e\u0440","slow_loading":"\u041a\u0430\u0440\u0442\u0430 \u043f\u043e\u0432\u0456\u043b\u044c\u043d\u043e \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0443\u0454\u0442\u044c\u0441\u044f \u0442\u0430 \u043c\u043e\u0436\u0435 \u0432\u0438\u0433\u043b\u044f\u0434\u0430\u0442\u0438 \u043f\u043e\u0448\u043a\u043e\u0434\u0436\u0435\u043d\u043e\u044e","loading":"\u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f\u2026"}}')},6984:ae=>{"use strict";ae.exports=JSON.parse('{"pnx":{"contrast":"\u589e\u52a0\u76f8\u7247\u5c0d\u6bd4\u5ea6","copied":"\u5df2\u8907\u88fd","copy":"\u8907\u88fd","edit_osm":"\u7de8\u8f2f OSM","error":"Panoramax \u7576\u6a5f\u4e86\u2026","error_api":"\u76f8\u7247\u4f3a\u670d\u5668\u7121\u6cd5\u4f7f\u7528","error_api_compatibility":"\u76f8\u7247\u4f3a\u670d\u5668\u548c\u6b64\u6aa2\u8996\u5668\u7684\u7248\u672c\u4e0d\u76f8\u5bb9","error_josm":"JOSM \u6c92\u6709\u56de\u61c9\uff0c\u5b83\u5df2\u7d93\u555f\u52d5\u4e14\u555f\u7528\u9060\u7aef\u63a7\u5236\u4e86\u55ce?","error_nopic":"\u641c\u5c0b\u7684\u4f4d\u7f6e\u9644\u8fd1\u6c92\u6709\u76f8\u7247","error_pic":"\u627e\u4e0d\u5230\u6307\u5b9a\u7684\u76f8\u7247","error_psv":"\u7121\u6cd5\u6b63\u78ba\u8f09\u5165 Photo Sphere Viewer","error_subtitle":"\u8acb\u7a0d\u5f8c\u91cd\u8a66\u6216\u6aa2\u67e5\u700f\u89bd\u5668\u7684\u4e3b\u63a7\u53f0\u4ee5\u4e86\u89e3\u8a73\u60c5\u3002","error_webgl":"\u60a8\u7684\u700f\u89bd\u5668\u4e0d\u652f\u63f4 WebGL","expand":"\u5c55\u958b","expand_info":"\u5728\u6574\u500b\u756b\u9762\u986f\u793a\u6b64\u5c0f\u5de5\u5177","filter_camera_model":"\u6309\u76f8\u6a5f\u578b\u865f","filter_date":"\u65e5\u671f","filter_picture":"\u76f8\u7247\u985e\u578b","filter_user":"\u4f7f\u7528\u8005","filter_zoom_in":"\u62c9\u8fd1\u5730\u5716\u4ee5\u986f\u793a\u7be9\u9078\u7d50\u679c","filters":"\u7be9\u9078\u5668","id":"iD","josm":"JOSM","josm_live":"\u555f\u7528\u8f09\u5165\u76f8\u7247\u6642\u81ea\u52d5\u540c\u6b65 JOSM","layers":"\u5716\u5c64","legend_license":"\u6388\u6b0a: {l}","loading_labels_fun":["\ud83e\udd8c \u5075\u6e2c\u5230\u7576\u5fc3\u6885\u82b1\u9e7f\u6a19\u8a8c","\ud83d\ude98 \u6b63\u5728\u641c\u5c0b Panoramax \u6c7d\u8eca \xa9","\u2615 \u6ce8\u5165\u5496\u5561\u56e0","\ud83d\ude00 \u8acb\u5fae\u7b11\uff0c\u60a8\u5df2\u88ab\u6a19\u8a18\u5728\u5730\u5716\u4e0a\u4e86\uff01","\ud83d\udc08 \u6b63\u5728\u5206\u4eab\u8c93\u54aa\u7684\u76f8\u7247","\ud83d\ude34 \u6b63\u5728\u6e1b\u5c11\u5ef6\u9072","\ud83e\uded6 \u6b63\u5728\u6c8f\u58fa\u597d\u8336","\ud83d\udc27 \u6b63\u5728\u958b\u555f\u539f\u59cb\u78bc","\ud83d\ude87 \u6b63\u5728\u7d22\u5f15\u5730\u9435\u8eca\u7ad9","\ud83e\uddf9 \u6e05\u7406\u8a6e\u91cb\u8cc7\u6599","\ud83d\ude92 \u6b63\u5728\u50b3\u9001\u6d88\u9632\u968a\u7684\u76f8\u7247","\ud83d\udeb2 \u66f4\u65b0\u7da0\u9053","\ud83d\ude89 \u6b63\u5728\u901a\u904e\u8eca\u7ad9\u6708\u53f0","\ud83d\udef0\ufe0f \u6b63\u5728\u641c\u5c0b\u885b\u661f","\ud83d\udc65 \u6b63\u5728\u64b0\u5beb\u4eba\u7269\u8a8c","\ud83c\udf57 \u6b63\u5728\u5b9a\u4f4d\u9e79\u9165\u96de\u5e97","\ud83e\uddd1\u200d\ud83d\udcbb \u6b63\u5728\u5075\u932f\u4ecb\u9762","\ud83d\udcc8 \u7d71\u8a08\u6578\u64da\u6b63\u5728\u589e\u52a0","\ud83e\udd16 \u6b63\u5728\u5b78\u7fd2\u8a9e\u7fa9","\ud83c\udfa8 \u91cd\u65b0\u8a2d\u8a08\u4ecb\u9762","\ud83d\udcc5 \u6b63\u5728\u898f\u5283\u76f8\u7247\u5730\u5716\u7e6a\u5716\u805a\u6703","\ud83e\uddc0 \u6b63\u5728\u719f\u6210\u5207\u9054\u8d77\u53f8","\ud83c\udf04 \u6b63\u5728\u8a08\u7b97\u6046\u6625\u7684\u65e5\u7167\u6642\u6578","\ud83c\udf0a \u6b63\u5728\u6e2c\u91cf\u6f6e\u6c50"],"loading_labels_serious":["\ud83d\uddfa\ufe0f \u6b63\u5728\u8f09\u5165\u5730\u5716\u8cc7\u6599","\ud83d\udda5\ufe0f \u6b63\u5728\u67e5\u8a62 API","\ud83d\uddbc\ufe0f \u6b63\u5728\u8f09\u5165\u7e2e\u5716","\ud83d\udd0d \u6b63\u5728\u5206\u6790 EXIF \u8a6e\u91cb\u8cc7\u6599","\ud83c\udfd8\ufe0f \u6b63\u5728\u7b97\u7e6a 3D","\ud83d\udcf7 \u6b63\u5728\u521d\u59cb\u5316 360\xb0 \u76f8\u7247","\ud83d\udfe0 \u6b63\u5728\u5e73\u8861\u8272\u5f69","\ud83d\udcaf \u6b63\u5728\u8a08\u7b97\u54c1\u8cea\u5206\u6578 \xa9","\ud83d\udce1 \u6b63\u5728\u4e0b\u8f09\u66f4\u65b0","\ud83c\udf0d \u6b63\u5728\u53d6\u5f97\u5730\u5716\u5716\u78da","\ud83d\udcf8 \u6b63\u5728\u8655\u7406\u9670\u5f71"],"map_background":"\u5730\u5716\u80cc\u666f","map_background_aerial":"\u885b\u661f","map_background_streets":"\u9810\u8a2d","map_theme":"\u5730\u5716\u4e3b\u984c","map_theme_age":"\u62cd\u651d\u6642\u9593","map_theme_age_1":"> 2 \u5e74","map_theme_age_2":"< 2 \u5e74","map_theme_age_3":"< 1 \u5e74","map_theme_age_4":"< 1 \u500b\u6708","map_theme_default":"\u7d93\u5178","map_theme_type":"\u76f8\u6a5f\u985e\u578b","metadata":"\u76f8\u7247\u8a6e\u91cb\u8cc7\u6599","metadata_camera":"\u76f8\u6a5f","metadata_camera_focal_length":"\u7126\u8ddd","metadata_camera_make":"\u88fd\u9020\u5546","metadata_camera_model":"\u578b\u865f","metadata_camera_type":"\u985e\u578b","metadata_exif":"EXIF","metadata_exif_name":"\u6a19\u7c64","metadata_exif_value":"\u503c","metadata_general_author":"\u4f5c\u8005","metadata_general_date":"\u62cd\u651d\u6642\u9593","metadata_general_license":"\u6388\u6b0a","metadata_general_license_link":"\u67e5\u770b\u5b8c\u6574\u6388\u6b0a\u689d\u6b3e","metadata_general_picid":"\u76f8\u7247","metadata_general_picid_link":"\u524d\u5f80\u672c\u76f8\u7247\u7684 JSON \u8aaa\u660e","metadata_general_seqid":"\u5e8f\u5217","metadata_general_seqid_link":"\u524d\u5f80\u672c\u5e8f\u5217\u7684 JSON \u8aaa\u660e","metadata_location":"\u4f4d\u7f6e","metadata_location_latitude":"\u7def\u5ea6","metadata_location_longitude":"\u7d93\u5ea6","metadata_location_orientation":"\u65b9\u5411","metadata_location_precision":"\u5b9a\u4f4d\u7cbe\u5ea6","minimize":"\u96b1\u85cf\u9019\u500b\u5c0f\u5de5\u5177\uff0c\u60a8\u53ef\u4ee5\u6309\u5de6\u4e0b\u89d2\u7684\u6309\u9215\u518d\u6b21\u986f\u793a\u5b83","moveDown":"\u4e0b\u79fb","moveLeft":"\u5de6\u79fb","moveMiddle":"\u756b\u9762\u7f6e\u4e2d","moveRight":"\u53f3\u79fb","moveUp":"\u4e0a\u79fb","options":"\u9078\u9805","picture_360":"360\xb0","picture_flat":"\u7d93\u5178","search":"\u641c\u5c0b","search_address":"\u641c\u5c0b\u5730\u5740\u3001\u57ce\u5e02\u2026","search_empty":"\u627e\u4e0d\u5230\u7d50\u679c","search_user":"\u641c\u5c0b\u5e33\u865f\u2026","sequence_more":"\u66f4\u591a\u64ad\u653e\u9078\u9805","sequence_next":"\u5e8f\u5217\u4e2d\u7684\u4e0b\u4e00\u5f35\u76f8\u7247","sequence_pause":"\u66ab\u505c\u5e8f\u5217","sequence_play":"\u64ad\u653e\u5e8f\u5217","sequence_prev":"\u5e8f\u5217\u4e2d\u7684\u4e0a\u4e00\u5f35\u76f8\u7247","sequence_speed":"\u64ad\u653e\u901f\u5ea6","share":"\u5206\u4eab","share_embed":"\u5d4c\u5165\u5230\u60a8\u7684\u7db2\u7ad9","share_image":"\u9ad8\u756b\u8cea\u76f8\u7247","share_links":"\u8d85\u9023\u7d50","share_page":"\u9019\u5f35\u76f8\u7247\u7684\u9023\u7d50","share_print":"\u5217\u5370","share_rss":"RSS \u6458\u8981","share_rss_title":"\u76ee\u524d\u5730\u5716\u53ef\u898b\u5340\u57df\u4e2d\u65b0\u76f8\u7247\u5e8f\u5217\u7684 RSS \u6458\u8981","show_map":"\u986f\u793a\u5730\u5716","show_psv":"\u986f\u793a\u76f8\u7247\u6aa2\u8996\u5668","zoom":"\u7e2e\u653e","zoomIn":"\u62c9\u8fd1","zoomOut":"\u62c9\u9060","report_submit":"\u9001\u51fa","report_email":"\u60a8\u7684 email","report_nature_label":"\u554f\u984c\u7684\u539f\u56e0","report_nature":{"":"\u9078\u64c7\u554f\u984c\u7684\u985e\u578b\u2026","blur_missing":"\u53ef\u4ee5\u770b\u898b\u4eba\u81c9\u6216\u8eca\u724c","blur_excess":"\u5c0d\u7269\u4ef6\u5957\u7528\u4e86\u4e0d\u5fc5\u8981\u7684\u6a21\u7cca\u8655\u7406","inappropriate":"\u4e0d\u7576\u7684\u76f8\u7247 (\u4e0d\u76f8\u95dc\u3001\u88f8\u9ad4\u2026)","privacy":"\u53ef\u4ee5\u770b\u898b\u79c1\u4eba\u7684\u9053\u8def\u6216\u8cc7\u7522","picture_low_quality":"\u4f4e\u54c1\u8cea\u7684\u76f8\u7247","mislocated":"\u76f8\u7247\u5728\u5730\u5716\u4e0a\u7684\u4f4d\u7f6e\u4e0d\u6b63\u78ba","copyright":"\u76f8\u7247\u4fb5\u72af\u4e86\u7248\u6b0a","other":"\u4efb\u4f55\u5176\u4ed6\u985e\u578b\u7684\u554f\u984c"},"share_embed_docs":"\u6df1\u5165\u4e86\u89e3\u5d4c\u5165\u8a2d\u5b9a\u503c","error_retry":"\u8acb\u7a0d\u5f8c\u518d\u8a66","error_click":"\u7e7c\u7e8c","legend_title":"\u986f\u793a\u76f8\u7247\u7684\u8a73\u7d30\u8cc7\u6599","report_email_placeholder":"\u9078\u586b","report_whole_sequence":"\u9019\u500b\u554f\u984c\u5f71\u97ff\u6574\u500b\u5e8f\u5217","report_details":"\u66f4\u591a\u8cc7\u8a0a","report_details_placeholder":"\u9078\u586b\uff0c\u60a8\u53ef\u4ee5\u8a73\u8ff0\u6b64\u554f\u984c","report_wait":"\u6b63\u5728\u50b3\u9001\u5831\u544a\u2026","report_success":"\u5df2\u6210\u529f\u767c\u9001\u5831\u544a\uff0c\u6211\u5011\u5c07\u5118\u5feb\u5c0d\u5b83\u9032\u884c\u5be9\u6838\u3002","report_failure":"\u5efa\u7acb\u5831\u544a\u6642\u767c\u9001\u932f\u8aa4: {e}\uff0c\u8acb\u7a0d\u5f8c\u518d\u8a66\u3002","report_auth":"\u6b64\u5831\u544a\u5c07\u4f7f\u7528\u60a8\u7684\u5e33\u6236\u300c{a}\u300d\u767c\u9001","filter_qualityscore":"\u54c1\u8cea\u5206\u6578","filter_qualityscore_help":"\u9ede\u64ca\u4ee5\u555f\u7528\u6216\u505c\u7528","map_theme_score":"\u54c1\u8cea\u5206\u6578","metadata_camera_resolution":"\u89e3\u6790\u5ea6","metadata_quality":"\u54c1\u8cea","metadata_quality_help":"\u6df1\u5165\u4e86\u89e3\u54c1\u8cea\u5206\u6578","metadata_quality_gps_score":"\u5b9a\u4f4d\u5206\u6578","metadata_quality_resolution_score":"\u89e3\u6790\u5ea6\u5206\u6578","metadata_quality_missing":"\u76f8\u7247\u672a\u5305\u542b\u8cc7\u8a0a","report":"\u6aa2\u8209","metadata_quality_score":"\u6574\u9ad4\u5206\u6578","filter_user_mypics":"\u6211\u7684\u76f8\u7247","filter_date_1month":"1 \u500b\u6708","filter_date_1year":"1 \u5e74","qualityscore_doc_2":"\u5206\u6578\u4ee5 A/B/C/D/E \u7b49\u7d1a\u7684\u5f62\u5f0f\u986f\u793a (A \u6700\u4f73\u3001E \u6700\u5dee) \uff0c\u4e26\u900f\u904e\u9019\u500b\u91cf\u5c3a\u8996\u89ba\u5316\u986f\u793a:","qualityscore_doc_link":"\u6df1\u5165\u4e86\u89e3\u54c1\u8cea\u5206\u6578","qualityscore_title":"\u95dc\u65bc\u54c1\u8cea\u5206\u6578","qualityscore_doc_1":"Panoramax \u70ba\u6bcf\u5f35\u76f8\u7247\u63d0\u4f9b\u54c1\u8cea\u5206\u6578\uff0c\u9019\u80fd\u5e6b\u52a9\u6211\u5011\u8f15\u9b06\u5730\u5728\u5730\u5716\u4e0a\u7be9\u9078\u548c\u986f\u793a\u9ad8\u54c1\u8cea\u76f8\u7247\u3002","qualityscore_doc_3":"\u5b83\u6839\u64da GPS \u7cbe\u78ba\u5ea6\u548c\u76f8\u7247\u89e3\u6790\u5ea6\u8a08\u7b97\u5f97\u51fa\uff0c\u5c08\u696d\u8a2d\u5099\u7684\u7b49\u7d1a\u70ba A\u3001360\xb0 \u904b\u52d5\u76f8\u6a5f\u7684\u7b49\u7d1a\u70ba B\u3001\u667a\u6167\u578b\u624b\u6a5f\u7684\u7b49\u7d1a\u70ba C/D/E\u3002","minimize_short":"\u96b1\u85cf","metadata_general_instance":"\u4f86\u6e90\u57f7\u884c\u500b\u9ad4","metadata_general_copy_picid":"\u8907\u88fd\u76f8\u7247 ID","metadata_general_copy_id":"\u8907\u88fd ID","picture_360_long":"\u5168\u666f\u76f8\u7247","metadata_summary":"\u6458\u8981","picture_flat_long":"\u7d93\u5178\u76f8\u7247","geo_uri":"\u5916\u90e8\u7a0b\u5f0f","contribute_id":"\u900f\u904e iD \u7de8\u8f2f\u5668\u4f86\u8ca2\u737b OpenStreetMap","filter_date_6months":"6 \u500b\u6708","picture_all":"\u5168\u90e8","metadata_exif_doc":"EXIF \u6a19\u7c64\u6587\u4ef6","metadata_exif_doc_title":"\u8acb\u53c3\u95b1 Exiv2 \u6587\u4ef6\u4ee5\u53d6\u5f97 EXIF \u548c XMP \u6a19\u7c64\u5b9a\u7fa9\u7684\u5b8c\u6574\u8aaa\u660e","metadata_location_coordinates":"\u5ea7\u6a19 (\u7d93\u5ea6, \u7def\u5ea6)","metadata_location_copy":"\u8907\u88fd {v}","metadata_location_copy_more":"\u66f4\u591a\u5ea7\u6a19\u8907\u88fd\u9078\u9805","semantics_title":"\u6a19\u7c64","semantics_tags":"{nb} \u500b\u6a19\u7c64","semantics_show_annotations":"\u986f\u793a\u76f8\u7247\u7279\u5fb5","semantics_show_all_tags":"\u986f\u793a\u6240\u6709\u6a19\u7c64","semantics_key":"\u7d22\u5f15\u9375","semantics_annotation_tooltip":"\u9ede\u64ca\u67e5\u770b\u8a73\u60c5","semantics_features_default_title":"\u6a19\u7c64 {nb}","semantics_features_subtitle":"{nb} \u500b\u95dc\u806f\u7684\u5c6c\u6027","semantics_hide_all_tags":"\u96b1\u85cf\u6240\u6709\u6a19\u7c64","semantics_features_none":"\u6b64\u76f8\u7247\u5c1a\u672a\u7e6a\u88fd\u4efb\u4f55\u7279\u5fb5\u3002","semantics_value":"\u503c","semantics_tags_picture_none":"\u6b64\u76f8\u7247\u5c1a\u672a\u52a0\u4e0a\u4efb\u4f55\u6a19\u7c64\u3002","semantics_tags_picture":"\u76f8\u7247\u6a19\u7c64","whats_panoramax":"Panoramax \u662f\u5404\u5730\u76f8\u7247\u7684\u5730\u7406\u5171\u4eab\u8cc7\u6e90\u3002","semantics_features":"\u76f8\u7247\u7279\u5fb5","semantics_key_doc":"\u6df1\u5165\u4e86\u89e3\u6b64\u7d22\u5f15\u9375","semantics_value_doc":"\u6df1\u5165\u4e86\u89e3\u6b64\u6a19\u7c64","semantics_qualifiers":"\u9650\u5b9a\u689d\u4ef6","semantics_hide_annotations":"\u96b1\u85cf\u76f8\u7247\u7279\u5fb5","semantics_zero_annotations":"\u6b64\u76f8\u7247\u5c1a\u672a\u7e6a\u88fd\u4efb\u4f55\u7279\u5fb5","semantics_hashtags":"\u76f8\u7247\u4e3b\u984c\u6a19\u7c64","semantics_wikidata_properties":{"P31":"\u96b8\u5c6c\u65bc","P279":"\u4e0a\u7d1a\u5206\u985e","P361":"\u6240\u5c6c\u5be6\u9ad4"},"panoramax":"Panoramax","semantics_editor_example":"key=value\\nprefix|key=value","semantics_edit":"\u7de8\u8f2f\u5c6c\u6027","semantics_save":"\u5132\u5b58\u8b8a\u66f4","semantics_undo":"\u53d6\u6d88\u8b8a\u66f4","semantics_cantsave_invalid":"\u7121\u6cd5\u5132\u5b58\u8b8a\u66f4\uff0c\u7121\u6548\u7684\u8f38\u5165","semantics_send_fail":"\u7121\u6cd5\u5132\u5b58\u8b8a\u66f4\uff0c\u8acb\u7a0d\u5019\u518d\u8a66","semantics_send_ok":"\u5df2\u6210\u529f\u5132\u5b58\u8b8a\u66f4","semantics_add_annotation":"\u65b0\u589e\u6a19\u7c64","semantics_save_drawn_annotation":"\u5132\u5b58\u4f4d\u7f6e","semantics_undo_drawn_annotation":"\u53d6\u6d88","semantics_delete_annotation":"\u522a\u9664\u9019\u500b\u7279\u5fb5","semantics_delete_annotation_confirm":"\u60a8\u78ba\u5b9a\u8981\u522a\u9664\u9019\u500b\u6a19\u7c64\u55ce\uff1f","semantics_save_drawn_annotation_incomplete":"\u60a8\u5fc5\u9808\u5728\u9a57\u8b49\u4e4b\u524d\u7e6a\u88fd\u4e00\u500b\u9069\u5408\u76f8\u7247\u7684\u77e9\u5f62","semantics_draw_annotation":"\u60a8\u53ef\u4ee5\u5c07\u60f3\u8981\u65b0\u589e\u7684\u7269\u4ef6\u7e6a\u88fd\u5728\u5716\u7247\u4e0a (\u9078\u7528)\u3002","semantics_editor_error":"\u8a9e\u6cd5\u7121\u6548\uff0c\u60a8\u7684\u6a19\u7c64\u770b\u8d77\u4f86\u61c9\u8a72\u8981\u50cf:\\nkey=value\\nprefix|key=value\\nprefix|key[qualif_key=qualif_val]=value\\n\\nkey \u6700\u5927\u9577\u5ea6\u70ba 256 \u500b\u5b57\u5143\uff0cvalue \u6700\u5927\u9577\u5ea6\u70ba 2048 \u500b\u5b57\u5143\u3002","semantics_login_needed":"\u82e5\u8981\u7de8\u8f2f\u76f8\u7247\u6a19\u7c64\u6216\u7279\u5fb5\uff0c\u60a8\u9700\u8981\u767b\u5165 Panoramax {n} \u57f7\u884c\u500b\u9ad4\uff0c\u60a8\u8981\u767b\u5165\u55ce\uff1f","semantics_doc":"\u8aaa\u660e","semantics_doc_title":"\u95dc\u65bc\u6a19\u7c64","semantics_erase_annotation":"\u522a\u9664\u7e6a\u88fd\u7684\u6a19\u7c64","semantics_doc_info1":"\u4f7f\u7528\u6a19\u7c64\u6a19\u8a18\u5716\u7247\u7684\u80cc\u666f\u8cc7\u8a0a\u3002\u60a8\u53ef\u4ee5\u52a0\u4e0a transport=car \u9019\u500b\u6a19\u7c64\uff0c\u5c07\u5176\u6a19\u8a18\u70ba\u99d5\u99db\u6c7d\u8eca\u62cd\u651d\u3002","semantics_doc_info2":"\u60a8\u4e5f\u53ef\u4ee5\u5728\u5716\u7247\u4e2d\u6a19\u8a18\u7269\u4ef6\uff1a\u9053\u8def\u6a19\u8a8c\u3001\u90fd\u5e02\u8a2d\u5099\u7b49\u3002\u4f7f\u7528\u73fe\u6709\u7684\u6a19\u7c64\u6a19\u8a18\u60a8\u6240\u770b\u5230\u7684\uff0c\u4e5f\u53ef\u4ee5\u6309\u7167\u9700\u6c42\u5efa\u7acb\u81ea\u5df1\u7684\u6a19\u7c64\u3002","semantics_doc_info3":"\u6709\u4e9b\u7269\u4ef6\u662f\u7531 AI \u81ea\u52d5\u5075\u6e2c\u7684\uff0c\u56e0\u6b64\u4e0d\u4fdd\u8b49\u54c1\u8cea\u3002","semantics_doc_link":"\u6df1\u5165\u4e86\u89e3\u6a19\u7c64","semantics_sequence_tags":"\u5e8f\u5217\u6a19\u7c64","semantics_picture_tags":"\u76f8\u7247\u6a19\u7c64","semantics_annotation_tags":"\u7269\u4ef6\u6a19\u7c64"},"map":{"loading":"\u6b63\u5728\u8f09\u5165\u2026","not_public":"\u672a\u516c\u958b\u986f\u793a","thumbnail":"\u904a\u6a19\u61f8\u505c\u76f8\u7247\u7684\u7e2e\u5716","slow_loading":"\u5730\u5716\u8f09\u5165\u901f\u5ea6\u7de9\u6162\u800c\u4e14\u53ef\u80fd\u51fa\u73fe\u640d\u58de","more_panoramax":"\u6df1\u5165\u4e86\u89e3 Panoramax","map_data":"\u5730\u5716\u8cc7\u6599: {m}"},"psv":{"ctrlZoom":"\u4f7f\u7528 CTRL + \u6ed1\u9f20\u6efe\u8f2a\u7e2e\u653e\u5716\u7247","loadError":"\u7121\u6cd5\u8f09\u5165\u5168\u666f\u5716","twoFingers":"\u4f7f\u7528\u96d9\u6307\u79fb\u52d5"},"maplibre":{"GeolocateControl.FindMyLocation":"\u5c0b\u627e\u6211\u7684\u4f4d\u7f6e","GeolocateControl.LocationNotAvailable":"\u7121\u6cd5\u4f7f\u7528\u4f4d\u7f6e\u8cc7\u8a0a"}}')}},ue={};function __webpack_require__(nt){var ut=ue[nt];if(void 0!==ut)return ut.exports;var qt=ue[nt]={exports:{}};return ae[nt].call(qt.exports,qt,qt.exports,__webpack_require__),qt.exports}__webpack_require__.n=ae=>{var ue=ae&&ae.__esModule?()=>ae.default:()=>ae;return __webpack_require__.d(ue,{a:ue}),ue},__webpack_require__.d=(ae,ue)=>{for(var nt in ue)__webpack_require__.o(ue,nt)&&!__webpack_require__.o(ae,nt)&&Object.defineProperty(ae,nt,{enumerable:!0,get:ue[nt]})},__webpack_require__.o=(ae,ue)=>Object.prototype.hasOwnProperty.call(ae,ue),__webpack_require__.r=ae=>{"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(ae,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(ae,"__esModule",{value:!0})};var nt={};return(()=>{"use strict";__webpack_require__.r(nt),__webpack_require__.d(nt,{CoverageMap:()=>qt.A,Editor:()=>Yt.A,PhotoViewer:()=>Xt.Ay,Viewer:()=>ut.A,components:()=>ae,utils:()=>ue});var ae=__webpack_require__(9341),ue=__webpack_require__(2030),ut=__webpack_require__(8743),qt=__webpack_require__(153),Yt=__webpack_require__(1752),Xt=__webpack_require__(3407)})(),nt})()));
2923
2923
  //# sourceMappingURL=index.js.map