VR-Procedural-Generated-Forest/p5xr.js

96 lines
207 KiB
JavaScript

(()=>{var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{};function t(e,t,i,r){Object.defineProperty(e,t,{get:i,set:r,enumerable:!0,configurable:!0})}var i,r={};i=r,Object.defineProperty(i,"__esModule",{value:!0,configurable:!0}),t(r,"default",(()=>dt));
/**
* @license
* webxr-polyfill
* Copyright (c) 2017 Google
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* @license
* cardboard-vr-display
* Copyright (c) 2015-2017 Google
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* @license
* webvr-polyfill-dpdb
* Copyright (c) 2017 Google
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* @license
* wglu-preserve-state
* Copyright (c) 2016, Brandon Jones.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
/**
* @license
* nosleep.js
* Copyright (c) 2017, Rich Tibbett
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
const n=void 0!==e?e:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},s=Symbol("@@webxr-polyfill/EventTarget");class a{constructor(){this[s]={listeners:new Map}}addEventListener(e,t){if("string"!=typeof e)throw new Error("`type` must be a string");if("function"!=typeof t)throw new Error("`listener` must be a function");const i=this[s].listeners.get(e)||[];i.push(t),this[s].listeners.set(e,i)}removeEventListener(e,t){if("string"!=typeof e)throw new Error("`type` must be a string");if("function"!=typeof t)throw new Error("`listener` must be a function");const i=this[s].listeners.get(e)||[];for(let e=i.length;e>=0;e--)i[e]===t&&i.pop()}dispatchEvent(e,t){const i=this[s].listeners.get(e)||[],r=[];for(let e=0;e<i.length;e++)r[e]=i[e];for(let e of r)e(t);"function"==typeof this[`on${e}`]&&this[`on${e}`](t)}}let o="undefined"!=typeof Float32Array?Float32Array:Array;Math.PI;function l(){let e=new o(16);return o!=Float32Array&&(e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0),e[0]=1,e[5]=1,e[10]=1,e[15]=1,e}function c(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function h(e,t){let i=t[0],r=t[1],n=t[2],s=t[3],a=t[4],o=t[5],l=t[6],c=t[7],h=t[8],u=t[9],d=t[10],A=t[11],p=t[12],f=t[13],m=t[14],g=t[15],v=i*o-r*a,w=i*l-n*a,y=i*c-s*a,b=r*l-n*o,E=r*c-s*o,x=n*c-s*l,M=h*f-u*p,S=h*m-d*p,_=h*g-A*p,R=u*m-d*f,F=u*g-A*f,T=d*g-A*m,P=v*T-w*F+y*R+b*_-E*S+x*M;return P?(P=1/P,e[0]=(o*T-l*F+c*R)*P,e[1]=(n*F-r*T-s*R)*P,e[2]=(f*x-m*E+g*b)*P,e[3]=(d*E-u*x-A*b)*P,e[4]=(l*_-a*T-c*S)*P,e[5]=(i*T-n*_+s*S)*P,e[6]=(m*y-p*x-g*w)*P,e[7]=(h*x-d*y+A*w)*P,e[8]=(a*F-o*_+c*M)*P,e[9]=(r*_-i*F-s*M)*P,e[10]=(p*E-f*y+g*v)*P,e[11]=(u*y-h*E-A*v)*P,e[12]=(o*S-a*R-l*M)*P,e[13]=(i*R-r*S+n*M)*P,e[14]=(f*w-p*b-m*v)*P,e[15]=(h*b-u*w+d*v)*P,e):null}function u(e,t,i){let r=t[0],n=t[1],s=t[2],a=t[3],o=t[4],l=t[5],c=t[6],h=t[7],u=t[8],d=t[9],A=t[10],p=t[11],f=t[12],m=t[13],g=t[14],v=t[15],w=i[0],y=i[1],b=i[2],E=i[3];return e[0]=w*r+y*o+b*u+E*f,e[1]=w*n+y*l+b*d+E*m,e[2]=w*s+y*c+b*A+E*g,e[3]=w*a+y*h+b*p+E*v,w=i[4],y=i[5],b=i[6],E=i[7],e[4]=w*r+y*o+b*u+E*f,e[5]=w*n+y*l+b*d+E*m,e[6]=w*s+y*c+b*A+E*g,e[7]=w*a+y*h+b*p+E*v,w=i[8],y=i[9],b=i[10],E=i[11],e[8]=w*r+y*o+b*u+E*f,e[9]=w*n+y*l+b*d+E*m,e[10]=w*s+y*c+b*A+E*g,e[11]=w*a+y*h+b*p+E*v,w=i[12],y=i[13],b=i[14],E=i[15],e[12]=w*r+y*o+b*u+E*f,e[13]=w*n+y*l+b*d+E*m,e[14]=w*s+y*c+b*A+E*g,e[15]=w*a+y*h+b*p+E*v,e}function d(e,t,i){let r=t[0],n=t[1],s=t[2],a=t[3],o=r+r,l=n+n,c=s+s,h=r*o,u=r*l,d=r*c,A=n*l,p=n*c,f=s*c,m=a*o,g=a*l,v=a*c;return e[0]=1-(A+f),e[1]=u+v,e[2]=d-g,e[3]=0,e[4]=u-v,e[5]=1-(h+f),e[6]=p+m,e[7]=0,e[8]=d+g,e[9]=p-m,e[10]=1-(h+A),e[11]=0,e[12]=i[0],e[13]=i[1],e[14]=i[2],e[15]=1,e}function A(e,t){return e[0]=t[12],e[1]=t[13],e[2]=t[14],e}function p(e,t){let i=t[0]+t[5]+t[10],r=0;return i>0?(r=2*Math.sqrt(i+1),e[3]=.25*r,e[0]=(t[6]-t[9])/r,e[1]=(t[8]-t[2])/r,e[2]=(t[1]-t[4])/r):t[0]>t[5]&&t[0]>t[10]?(r=2*Math.sqrt(1+t[0]-t[5]-t[10]),e[3]=(t[6]-t[9])/r,e[0]=.25*r,e[1]=(t[1]+t[4])/r,e[2]=(t[8]+t[2])/r):t[5]>t[10]?(r=2*Math.sqrt(1+t[5]-t[0]-t[10]),e[3]=(t[8]-t[2])/r,e[0]=(t[1]+t[4])/r,e[1]=.25*r,e[2]=(t[6]+t[9])/r):(r=2*Math.sqrt(1+t[10]-t[0]-t[5]),e[3]=(t[1]-t[4])/r,e[0]=(t[8]+t[2])/r,e[1]=(t[6]+t[9])/r,e[2]=.25*r),e}function f(e,t,i,r,n){let s,a=1/Math.tan(t/2);return e[0]=a/i,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=a,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=-1,e[12]=0,e[13]=0,e[15]=0,null!=n&&n!==1/0?(s=1/(r-n),e[10]=(n+r)*s,e[14]=2*n*r*s):(e[10]=-1,e[14]=-2*r),e}function m(){let e=new o(3);return o!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e}function g(e){var t=new o(3);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function v(e,t,i){let r=new o(3);return r[0]=e,r[1]=t,r[2]=i,r}function w(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}function y(e,t,i){return e[0]=t[0]+i[0],e[1]=t[1]+i[1],e[2]=t[2]+i[2],e}function b(e,t,i){return e[0]=t[0]*i,e[1]=t[1]*i,e[2]=t[2]*i,e}function E(e,t){let i=t[0],r=t[1],n=t[2],s=i*i+r*r+n*n;return s>0&&(s=1/Math.sqrt(s),e[0]=t[0]*s,e[1]=t[1]*s,e[2]=t[2]*s),e}function x(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function M(e,t,i){let r=t[0],n=t[1],s=t[2],a=i[0],o=i[1],l=i[2];return e[0]=n*l-s*o,e[1]=s*a-r*l,e[2]=r*o-n*a,e}function S(e,t,i){let r=i[0],n=i[1],s=i[2],a=i[3],o=t[0],l=t[1],c=t[2],h=n*c-s*l,u=s*o-r*c,d=r*l-n*o,A=n*d-s*u,p=s*h-r*d,f=r*u-n*h,m=2*a;return h*=m,u*=m,d*=m,A*=2,p*=2,f*=2,e[0]=o+h+A,e[1]=l+u+p,e[2]=c+d+f,e}const _=function(e){let t=e[0],i=e[1],r=e[2];return Math.sqrt(t*t+i*i+r*r)};!function(){let e=m()}();!function(){let e=function(){let e=new o(4);return o!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0,e[3]=0),e}()}();function R(){let e=new o(4);return o!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e[3]=1,e}function F(e,t,i){let r=t[0],n=t[1],s=t[2],a=t[3],o=i[0],l=i[1],c=i[2],h=i[3];return e[0]=r*h+a*o+n*c-s*l,e[1]=n*h+a*l+s*o-r*c,e[2]=s*h+a*c+r*l-n*o,e[3]=a*h-r*o-n*l-s*c,e}function T(e,t,i,r){let n,s,a,o,l,c=t[0],h=t[1],u=t[2],d=t[3],A=i[0],p=i[1],f=i[2],m=i[3];return s=c*A+h*p+u*f+d*m,s<0&&(s=-s,A=-A,p=-p,f=-f,m=-m),1-s>1e-6?(n=Math.acos(s),a=Math.sin(n),o=Math.sin((1-r)*n)/a,l=Math.sin(r*n)/a):(o=1-r,l=r),e[0]=o*c+l*A,e[1]=o*h+l*p,e[2]=o*u+l*f,e[3]=o*d+l*m,e}function P(e,t){let i=t[0],r=t[1],n=t[2],s=t[3],a=i*i+r*r+n*n+s*s,o=a?1/a:0;return e[0]=-i*o,e[1]=-r*o,e[2]=-n*o,e[3]=s*o,e}const C=function(e){let t=new o(4);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t},B=function(e,t,i,r){let n=new o(4);return n[0]=e,n[1]=t,n[2]=i,n[3]=r,n},D=function(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e},I=function(e,t){let i=t[0],r=t[1],n=t[2],s=t[3],a=i*i+r*r+n*n+s*s;return a>0&&(a=1/Math.sqrt(a),e[0]=i*a,e[1]=r*a,e[2]=n*a,e[3]=s*a),e},L=(function(){let e=m(),t=v(1,0,0),i=v(0,1,0)}(),function(){let e=R(),t=R()}(),function(){let e=function(){let e=new o(9);return o!=Float32Array&&(e[1]=0,e[2]=0,e[3]=0,e[5]=0,e[6]=0,e[7]=0),e[0]=1,e[4]=1,e[8]=1,e}()}(),Symbol("@@webxr-polyfill/XRRigidTransform"));class O{constructor(){if(this[L]={matrix:null,position:null,orientation:null,inverse:null},0===arguments.length)this[L].matrix=c(new Float32Array(16));else if(1===arguments.length)arguments[0]instanceof Float32Array?this[L].matrix=arguments[0]:(this[L].position=this._getPoint(arguments[0]),this[L].orientation=DOMPointReadOnly.fromPoint({x:0,y:0,z:0,w:1}));else{if(2!==arguments.length)throw new Error("Too many arguments!");this[L].position=this._getPoint(arguments[0]),this[L].orientation=this._getPoint(arguments[1])}if(this[L].matrix){let e=m();A(e,this[L].matrix),this[L].position=DOMPointReadOnly.fromPoint({x:e[0],y:e[1],z:e[2]});let t=R();p(t,this[L].matrix),this[L].orientation=DOMPointReadOnly.fromPoint({x:t[0],y:t[1],z:t[2],w:t[3]})}else this[L].matrix=c(new Float32Array(16)),d(this[L].matrix,B(this[L].orientation.x,this[L].orientation.y,this[L].orientation.z,this[L].orientation.w),v(this[L].position.x,this[L].position.y,this[L].position.z))}_getPoint(e){return e instanceof DOMPointReadOnly?e:DOMPointReadOnly.fromPoint(e)}get matrix(){return this[L].matrix}get position(){return this[L].position}get orientation(){return this[L].orientation}get inverse(){if(null===this[L].inverse){let e=c(new Float32Array(16));h(e,this[L].matrix),this[L].inverse=new O(e),this[L].inverse[L].inverse=this}return this[L].inverse}}const N=Symbol("@@webxr-polyfill/XRSpace");class G{constructor(e=null,t=null){this[N]={specialType:e,inputSource:t,baseMatrix:null,inverseBaseMatrix:null,lastFrameId:-1}}get _specialType(){return this[N].specialType}get _inputSource(){return this[N].inputSource}_ensurePoseUpdated(e,t){t!=this[N].lastFrameId&&(this[N].lastFrameId=t,this._onPoseUpdate(e))}_onPoseUpdate(e){"viewer"==this[N].specialType&&(this._baseMatrix=e.getBasePoseMatrix())}set _baseMatrix(e){this[N].baseMatrix=e,this[N].inverseBaseMatrix=null}get _baseMatrix(){return this[N].baseMatrix||this[N].inverseBaseMatrix&&(this[N].baseMatrix=new Float32Array(16),h(this[N].baseMatrix,this[N].inverseBaseMatrix)),this[N].baseMatrix}set _inverseBaseMatrix(e){this[N].inverseBaseMatrix=e,this[N].baseMatrix=null}get _inverseBaseMatrix(){return this[N].inverseBaseMatrix||this[N].baseMatrix&&(this[N].inverseBaseMatrix=new Float32Array(16),h(this[N].inverseBaseMatrix,this[N].baseMatrix)),this[N].inverseBaseMatrix}_getSpaceRelativeTransform(e){if(!this._inverseBaseMatrix||!e._baseMatrix)return null;let t=new Float32Array(16);return u(t,this._inverseBaseMatrix,e._baseMatrix),new O(t)}}const V=Symbol("@@webxr-polyfill/XRReferenceSpace"),k=["viewer","local","local-floor","bounded-floor","unbounded"];class z extends G{constructor(e,t=null){if(!k.includes(e))throw new Error(`XRReferenceSpaceType must be one of ${k}`);if(super(e),"bounded-floor"===e&&!t)throw new Error("XRReferenceSpace cannot use 'bounded-floor' type if the platform does not provide the floor level");(function(e){return"bounded-floor"===e||"local-floor"===e})(e)&&!t&&((t=c(new Float32Array(16)))[13]=1.6),this._inverseBaseMatrix=t||c(new Float32Array(16)),this[V]={type:e,transform:t,originOffset:c(new Float32Array(16))}}_transformBasePoseMatrix(e,t){u(e,this._inverseBaseMatrix,t)}_originOffsetMatrix(){return this[V].originOffset}_adjustForOriginOffset(e){let t=new Float32Array(16);h(t,this[V].originOffset),u(e,t,e)}_getSpaceRelativeTransform(e){let t=super._getSpaceRelativeTransform(e);return this._adjustForOriginOffset(t.matrix),new XRRigidTransform(t.matrix)}getOffsetReferenceSpace(e){let t=new z(this[V].type,this[V].transform,this[V].bounds);return u(t[V].originOffset,this[V].originOffset,e.matrix),t}}const Q=Symbol("@@webxr-polyfill/XR"),U=["inline","immersive-vr","immersive-ar"],X={inline:{requiredFeatures:["viewer"],optionalFeatures:[]},"immersive-vr":{requiredFeatures:["viewer","local"],optionalFeatures:[]},"immersive-ar":{requiredFeatures:["viewer","local"],optionalFeatures:[]}};let H;if("performance"in n==!1){let e=Date.now();H=()=>Date.now()-e}else H=()=>performance.now();var W=H;const q=Symbol("@@webxr-polyfill/XRPose");class j{constructor(e,t){this[q]={transform:e,emulatedPosition:t}}get transform(){return this[q].transform}get emulatedPosition(){return this[q].emulatedPosition}}const Y=Symbol("@@webxr-polyfill/XRViewerPose");class Z extends j{constructor(e,t,i=!1){super(e,i),this[Y]={views:t}}get views(){return this[Y].views}}const $=Symbol("@@webxr-polyfill/XRViewport");class K{constructor(e){this[$]={target:e}}get x(){return this[$].target.x}get y(){return this[$].target.y}get width(){return this[$].target.width}get height(){return this[$].target.height}}const J=["left","right","none"],ee=Symbol("@@webxr-polyfill/XRView");class te{constructor(e,t,i,r){if(!J.includes(i))throw new Error(`XREye must be one of: ${J}`);const n=Object.create(null),s=new K(n);this[ee]={device:e,eye:i,viewport:s,temp:n,sessionId:r,transform:t}}get eye(){return this[ee].eye}get projectionMatrix(){return this[ee].device.getProjectionMatrix(this.eye)}get transform(){return this[ee].transform}_getViewport(e){if(this[ee].device.getViewport(this[ee].sessionId,this.eye,e,this[ee].temp))return this[ee].viewport}}const ie=Symbol("@@webxr-polyfill/XRFrame"),re="XRFrame access outside the callback that produced it is invalid.";let ne=0;class se{constructor(e,t,i){this[ie]={id:++ne,active:!1,animationFrame:!1,device:e,session:t,sessionId:i}}get session(){return this[ie].session}getViewerPose(e){if(!this[ie].animationFrame)throw new DOMException("getViewerPose can only be called on XRFrame objects passed to XRSession.requestAnimationFrame callbacks.","InvalidStateError");if(!this[ie].active)throw new DOMException(re,"InvalidStateError");const t=this[ie].device,i=this[ie].session;i[we].viewerSpace._ensurePoseUpdated(t,this[ie].id),e._ensurePoseUpdated(t,this[ie].id);let r=e._getSpaceRelativeTransform(i[we].viewerSpace);const n=[];for(let r of i[we].viewSpaces){r._ensurePoseUpdated(t,this[ie].id);let i=e._getSpaceRelativeTransform(r),s=new te(t,i,r.eye,this[ie].sessionId);n.push(s)}return new Z(r,n,!1)}getPose(e,t){if(!this[ie].active)throw new DOMException(re,"InvalidStateError");const i=this[ie].device;if("target-ray"===e._specialType||"grip"===e._specialType)return i.getInputPose(e._inputSource,t,e._specialType);{e._ensurePoseUpdated(i,this[ie].id),t._ensurePoseUpdated(i,this[ie].id);let r=t._getSpaceRelativeTransform(e);return r?new XRPose(r,!1):null}}}const ae=Symbol("@@webxr-polyfill/XRRenderState"),oe=Object.freeze({depthNear:.1,depthFar:1e3,inlineVerticalFieldOfView:null,baseLayer:null});class le{constructor(e={}){const t=Object.assign({},oe,e);this[ae]={config:t}}get depthNear(){return this[ae].config.depthNear}get depthFar(){return this[ae].config.depthFar}get inlineVerticalFieldOfView(){return this[ae].config.inlineVerticalFieldOfView}get baseLayer(){return this[ae].config.baseLayer}}const ce=Symbol("@@webxr-polyfill/polyfilled-xr-compatible"),he=Symbol("@@webxr-polyfill/xr-compatible"),ue=Symbol("@@webxr-polyfill/XRWebGLLayer"),de=Object.freeze({antialias:!0,depth:!1,stencil:!1,alpha:!0,multiview:!1,ignoreDepthValues:!1,framebufferScaleFactor:1});const Ae=Symbol("@@webxr-polyfill/XRInputSourceEvent");class pe extends Event{constructor(e,t){super(e,t),this[Ae]={frame:t.frame,inputSource:t.inputSource},Object.setPrototypeOf(this,pe.prototype)}get frame(){return this[Ae].frame}get inputSource(){return this[Ae].inputSource}}const fe=Symbol("@@webxr-polyfill/XRSessionEvent");class me extends Event{constructor(e,t){super(e,t),this[fe]={session:t.session},Object.setPrototypeOf(this,me.prototype)}get session(){return this[fe].session}}const ge=Symbol("@@webxr-polyfill/XRInputSourcesChangeEvent");class ve extends Event{constructor(e,t){super(e,t),this[ge]={session:t.session,added:t.added,removed:t.removed},Object.setPrototypeOf(this,ve.prototype)}get session(){return this[ge].session}get added(){return this[ge].added}get removed(){return this[ge].removed}}const we=Symbol("@@webxr-polyfill/XRSession");class ye extends G{constructor(e){super(e)}get eye(){return this._specialType}_onPoseUpdate(e){this._inverseBaseMatrix=e.getBaseViewMatrix(this._specialType)}}class be extends a{constructor(e,t,i){super();let r="inline"!=t,n=new le({inlineVerticalFieldOfView:r?null:.5*Math.PI});this[we]={device:e,mode:t,immersive:r,ended:!1,suspended:!1,frameCallbacks:[],currentFrameCallbacks:null,frameHandle:0,deviceFrameHandle:null,id:i,activeRenderState:n,pendingRenderState:null,viewerSpace:new z("viewer"),viewSpaces:[],currentInputSources:[]},r?this[we].viewSpaces.push(new ye("left"),new ye("right")):this[we].viewSpaces.push(new ye("none")),this[we].onDeviceFrame=()=>{if(this[we].ended||this[we].suspended)return;if(this[we].deviceFrameHandle=null,this[we].startDeviceFrameLoop(),null!==this[we].pendingRenderState&&(this[we].activeRenderState=new le(this[we].pendingRenderState),this[we].pendingRenderState=null,this[we].activeRenderState.baseLayer&&this[we].device.onBaseLayerSet(this[we].id,this[we].activeRenderState.baseLayer)),null===this[we].activeRenderState.baseLayer)return;const t=new se(e,this,this[we].id),i=this[we].currentFrameCallbacks=this[we].frameCallbacks;this[we].frameCallbacks=[],t[ie].active=!0,t[ie].animationFrame=!0,this[we].device.onFrameStart(this[we].id,this[we].activeRenderState),this._checkInputSourcesChange();const r=W();for(let e=0;e<i.length;e++)try{i[e].cancelled||"function"!=typeof i[e].callback||i[e].callback(r,t)}catch(e){console.error(e)}this[we].currentFrameCallbacks=null,t[ie].active=!1,this[we].device.onFrameEnd(this[we].id)},this[we].startDeviceFrameLoop=()=>{null===this[we].deviceFrameHandle&&(this[we].deviceFrameHandle=this[we].device.requestAnimationFrame(this[we].onDeviceFrame))},this[we].stopDeviceFrameLoop=()=>{const e=this[we].deviceFrameHandle;null!==e&&(this[we].device.cancelAnimationFrame(e),this[we].deviceFrameHandle=null)},this[we].onPresentationEnd=t=>{if(t!==this[we].id)return this[we].suspended=!1,this[we].startDeviceFrameLoop(),void this.dispatchEvent("focus",{session:this});this[we].ended=!0,this[we].stopDeviceFrameLoop(),e.removeEventListener("@@webxr-polyfill/vr-present-end",this[we].onPresentationEnd),e.removeEventListener("@@webxr-polyfill/vr-present-start",this[we].onPresentationStart),e.removeEventListener("@@webxr-polyfill/input-select-start",this[we].onSelectStart),e.removeEventListener("@@webxr-polyfill/input-select-end",this[we].onSelectEnd),this.dispatchEvent("end",new me("end",{session:this}))},e.addEventListener("@@webxr-polyfill/vr-present-end",this[we].onPresentationEnd),this[we].onPresentationStart=e=>{e!==this[we].id&&(this[we].suspended=!0,this[we].stopDeviceFrameLoop(),this.dispatchEvent("blur",{session:this}))},e.addEventListener("@@webxr-polyfill/vr-present-start",this[we].onPresentationStart),this[we].onSelectStart=e=>{e.sessionId===this[we].id&&this[we].dispatchInputSourceEvent("selectstart",e.inputSource)},e.addEventListener("@@webxr-polyfill/input-select-start",this[we].onSelectStart),this[we].onSelectEnd=e=>{e.sessionId===this[we].id&&(this[we].dispatchInputSourceEvent("selectend",e.inputSource),this[we].dispatchInputSourceEvent("select",e.inputSource))},e.addEventListener("@@webxr-polyfill/input-select-end",this[we].onSelectEnd),this[we].onSqueezeStart=e=>{e.sessionId===this[we].id&&this[we].dispatchInputSourceEvent("squeezestart",e.inputSource)},e.addEventListener("@@webxr-polyfill/input-squeeze-start",this[we].onSqueezeStart),this[we].onSqueezeEnd=e=>{e.sessionId===this[we].id&&(this[we].dispatchInputSourceEvent("squeezeend",e.inputSource),this[we].dispatchInputSourceEvent("squeeze",e.inputSource))},e.addEventListener("@@webxr-polyfill/input-squeeze-end",this[we].onSqueezeEnd),this[we].dispatchInputSourceEvent=(t,i)=>{const r=new se(e,this,this[we].id),n=new pe(t,{frame:r,inputSource:i});r[ie].active=!0,this.dispatchEvent(t,n),r[ie].active=!1},this[we].startDeviceFrameLoop(),this.onblur=void 0,this.onfocus=void 0,this.onresetpose=void 0,this.onend=void 0,this.onselect=void 0,this.onselectstart=void 0,this.onselectend=void 0}get renderState(){return this[we].activeRenderState}get environmentBlendMode(){return this[we].device.environmentBlendMode||"opaque"}async requestReferenceSpace(e){if(this[we].ended)return;if(!k.includes(e))throw new TypeError(`XRReferenceSpaceType must be one of ${k}`);if(!this[we].device.doesSessionSupportReferenceSpace(this[we].id,e))throw new DOMException(`The ${e} reference space is not supported by this session.`,"NotSupportedError");if("viewer"===e)return this[we].viewerSpace;let t=await this[we].device.requestFrameOfReferenceTransform(e);if("bounded-floor"===e){if(!t)throw new DOMException(`${e} XRReferenceSpace not supported by this device.`,"NotSupportedError");if(!this[we].device.requestStageBounds())throw new DOMException(`${e} XRReferenceSpace not supported by this device.`,"NotSupportedError");throw new DOMException(`The WebXR polyfill does not support the ${e} reference space yet.`,"NotSupportedError")}return new z(e,t)}requestAnimationFrame(e){if(this[we].ended)return;const t=++this[we].frameHandle;return this[we].frameCallbacks.push({handle:t,callback:e,cancelled:!1}),t}cancelAnimationFrame(e){let t=this[we].frameCallbacks,i=t.findIndex((t=>t&&t.handle===e));i>-1&&(t[i].cancelled=!0,t.splice(i,1)),t=this[we].currentFrameCallbacks,t&&(i=t.findIndex((t=>t&&t.handle===e)),i>-1&&(t[i].cancelled=!0))}get inputSources(){return this[we].device.getInputSources()}async end(){if(!this[we].ended)return this[we].immersive&&(this[we].ended=!0,this[we].device.removeEventListener("@@webxr-polyfill/vr-present-start",this[we].onPresentationStart),this[we].device.removeEventListener("@@webxr-polyfill/vr-present-end",this[we].onPresentationEnd),this[we].device.removeEventListener("@@webxr-polyfill/input-select-start",this[we].onSelectStart),this[we].device.removeEventListener("@@webxr-polyfill/input-select-end",this[we].onSelectEnd),this.dispatchEvent("end",new me("end",{session:this}))),this[we].stopDeviceFrameLoop(),this[we].device.endSession(this[we].id)}updateRenderState(e){if(this[we].ended){throw new Error("Can't call updateRenderState on an XRSession that has already ended.")}if(e.baseLayer&&e.baseLayer._session!==this){throw new Error("Called updateRenderState with a base layer that was created by a different session.")}if(null!==e.inlineVerticalFieldOfView&&void 0!==e.inlineVerticalFieldOfView){if(this[we].immersive){throw new Error("inlineVerticalFieldOfView must not be set for an XRRenderState passed to updateRenderState for an immersive session.")}e.inlineVerticalFieldOfView=Math.min(3.13,Math.max(.01,e.inlineVerticalFieldOfView))}if(null===this[we].pendingRenderState){const e=this[we].activeRenderState;this[we].pendingRenderState={depthNear:e.depthNear,depthFar:e.depthFar,inlineVerticalFieldOfView:e.inlineVerticalFieldOfView,baseLayer:e.baseLayer}}Object.assign(this[we].pendingRenderState,e)}_checkInputSourcesChange(){const e=[],t=[],i=this.inputSources,r=this[we].currentInputSources;for(const t of i)r.includes(t)||e.push(t);for(const e of r)i.includes(e)||t.push(e);(e.length>0||t.length>0)&&this.dispatchEvent("inputsourceschange",new ve("inputsourceschange",{session:this,added:e,removed:t})),this[we].currentInputSources.length=0;for(const e of i)this[we].currentInputSources.push(e)}}const Ee=Symbol("@@webxr-polyfill/XRInputSource");class xe{constructor(e){this[Ee]={impl:e,gripSpace:new G("grip",this),targetRaySpace:new G("target-ray",this)}}get handedness(){return this[Ee].impl.handedness}get targetRayMode(){return this[Ee].impl.targetRayMode}get gripSpace(){let e=this[Ee].impl.targetRayMode;return"gaze"===e||"screen"===e?null:this[Ee].gripSpace}get targetRaySpace(){return this[Ee].targetRaySpace}get profiles(){return this[Ee].impl.profiles}get gamepad(){return this[Ee].impl.gamepad}}const Me=Symbol("@@webxr-polyfill/XRReferenceSpaceEvent");class Se extends Event{constructor(e,t){super(e,t),this[Me]={referenceSpace:t.referenceSpace,transform:t.transform||null},Object.setPrototypeOf(this,Se.prototype)}get referenceSpace(){return this[Me].referenceSpace}get transform(){return this[Me].transform}}var _e={XRSystem:class extends a{constructor(e){super(),this[Q]={device:null,devicePromise:e,immersiveSession:null,inlineSessions:new Set},e.then((e=>{this[Q].device=e}))}async isSessionSupported(e){return this[Q].device||await this[Q].devicePromise,"inline"!=e?Promise.resolve(this[Q].device.isSessionSupported(e)):Promise.resolve(!0)}async requestSession(e,t){if(!this[Q].device){if("inline"!=e)throw new Error("Polyfill Error: Must call navigator.xr.isSessionSupported() with any XRSessionMode\nor navigator.xr.requestSession('inline') prior to requesting an immersive\nsession. This is a limitation specific to the WebXR Polyfill and does not apply\nto native implementations of the API.");await this[Q].devicePromise}if(!U.includes(e))throw new TypeError(`The provided value '${e}' is not a valid enum value of type XRSessionMode`);const i=X[e],r=i.requiredFeatures.concat(t&&t.requiredFeatures?t.requiredFeatures:[]),n=i.optionalFeatures.concat(t&&t.optionalFeatures?t.optionalFeatures:[]),s=new Set;let a=!1;for(let e of r)this[Q].device.isFeatureSupported(e)?s.add(e):(console.error(`The required feature '${e}' is not supported`),a=!0);if(a)throw new DOMException("Session does not support some required features","NotSupportedError");for(let e of n)this[Q].device.isFeatureSupported(e)?s.add(e):console.log(`The optional feature '${e}' is not supported`);const o=await this[Q].device.requestSession(e,s),l=new XRSession(this[Q].device,e,o);"inline"==e?this[Q].inlineSessions.add(l):this[Q].immersiveSession=l;const c=()=>{"inline"==e?this[Q].inlineSessions.delete(l):this[Q].immersiveSession=null,l.removeEventListener("end",c)};return l.addEventListener("end",c),l}},XRSession:be,XRSessionEvent:me,XRFrame:se,XRView:te,XRViewport:K,XRViewerPose:Z,XRWebGLLayer:class{constructor(e,t,i={}){const r=Object.assign({},de,i);if(!(e instanceof be))throw new Error("session must be a XRSession");if(e.ended)throw new Error("InvalidStateError");if(t[ce]&&!0!==t[he])throw new Error("InvalidStateError");const n=t.getParameter(t.FRAMEBUFFER_BINDING);this[ue]={context:t,config:r,framebuffer:n,session:e}}get context(){return this[ue].context}get antialias(){return this[ue].config.antialias}get ignoreDepthValues(){return!0}get framebuffer(){return this[ue].framebuffer}get framebufferWidth(){return this[ue].context.drawingBufferWidth}get framebufferHeight(){return this[ue].context.drawingBufferHeight}get _session(){return this[ue].session}getViewport(e){return e._getViewport(this)}static getNativeFramebufferScaleFactor(e){if(!e)throw new TypeError("getNativeFramebufferScaleFactor must be passed a session.");return e[we].ended?0:1}},XRSpace:G,XRReferenceSpace:z,XRReferenceSpaceEvent:Se,XRInputSource:xe,XRInputSourceEvent:pe,XRInputSourcesChangeEvent:ve,XRRenderState:le,XRRigidTransform:O,XRPose:j};const Re=e=>"function"!=typeof e.prototype.makeXRCompatible&&(e.prototype.makeXRCompatible=function(){return this[he]=!0,Promise.resolve()},!0),Fe=e=>{const t=e.prototype.getContext;e.prototype.getContext=function(e,i){const r=t.call(this,e,i);return r&&(r[ce]=!0,i&&"xrCompatible"in i&&(r[he]=i.xrCompatible)),r}};var Te="undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{};var Pe,Ce,Be,De=(Pe=function(e,t){e.exports=function(){var e,t,i,r,n,s,a,o,l=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},c=function(){function e(e,t){for(var i=0;i<t.length;i++){var r=t[i];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,i,r){return i&&e(t.prototype,i),r&&e(t,r),t}}(),h=function(){function e(e,t){var i=[],r=!0,n=!1,s=void 0;try{for(var a,o=e[Symbol.iterator]();!(r=(a=o.next()).done)&&(i.push(a.value),!t||i.length!==t);r=!0);}catch(e){n=!0,s=e}finally{try{!r&&o.return&&o.return()}finally{if(n)throw s}}return i}return function(t,i){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,i);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),u=.001,d=1,A=function(e,t){return"data:"+e+","+encodeURIComponent(t)},p=function(e,t,i){return e+(t-e)*i},f=(o=/iPad|iPhone|iPod/.test(navigator.platform),function(){return o}),m=(a=-1!==navigator.userAgent.indexOf("Version")&&-1!==navigator.userAgent.indexOf("Android")&&-1!==navigator.userAgent.indexOf("Chrome"),function(){return a}),g=(s=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),function(){return s}),v=(n=-1!==navigator.userAgent.indexOf("Firefox")&&-1!==navigator.userAgent.indexOf("Android"),function(){return n}),w=(i=navigator.userAgent.match(/.*Chrome\/([0-9]+)/),r=i?parseInt(i[1],10):null,function(){return r}),y=function(){var e=!1;return e=f()&&g()&&-1!==navigator.userAgent.indexOf("13_4"),function(){return e}}(),b=function(){var e=!1;if(65===w()){var t=navigator.userAgent.match(/.*Chrome\/([0-9\.]*)/);if(t){var i=t[1].split("."),r=h(i,4),n=(r[0],r[1],r[2]),s=r[3];e=3325===parseInt(n,10)&&parseInt(s,10)<148}}return function(){return e}}(),E=(t=-1!==navigator.userAgent.indexOf("R7 Build"),function(){return t}),x=function(){var e=90==window.orientation||-90==window.orientation;return E()?!e:e},M=function(e){return!(isNaN(e)||e<=u||e>d)},S=function(){return Math.max(window.screen.width,window.screen.height)*window.devicePixelRatio},_=function(){return Math.min(window.screen.width,window.screen.height)*window.devicePixelRatio},R=function(e){if(m())return!1;if(e.requestFullscreen)e.requestFullscreen();else if(e.webkitRequestFullscreen)e.webkitRequestFullscreen();else if(e.mozRequestFullScreen)e.mozRequestFullScreen();else{if(!e.msRequestFullscreen)return!1;e.msRequestFullscreen()}return!0},F=function(){if(document.exitFullscreen)document.exitFullscreen();else if(document.webkitExitFullscreen)document.webkitExitFullscreen();else if(document.mozCancelFullScreen)document.mozCancelFullScreen();else{if(!document.msExitFullscreen)return!1;document.msExitFullscreen()}return!0},T=function(){return document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement},P=function(e,t,i,r){var n=e.createShader(e.VERTEX_SHADER);e.shaderSource(n,t),e.compileShader(n);var s=e.createShader(e.FRAGMENT_SHADER);e.shaderSource(s,i),e.compileShader(s);var a=e.createProgram();for(var o in e.attachShader(a,n),e.attachShader(a,s),r)e.bindAttribLocation(a,r[o],o);return e.linkProgram(a),e.deleteShader(n),e.deleteShader(s),a},C=function(e,t){for(var i={},r=e.getProgramParameter(t,e.ACTIVE_UNIFORMS),n="",s=0;s<r;s++)i[n=e.getActiveUniform(t,s).name.replace("[0]","")]=e.getUniformLocation(t,n);return i},B=function(e,t,i,r,n,s,a){var o=1/(t-i),l=1/(r-n),c=1/(s-a);return e[0]=-2*o,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=-2*l,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=2*c,e[11]=0,e[12]=(t+i)*o,e[13]=(n+r)*l,e[14]=(a+s)*c,e[15]=1,e},D=function(){var e=!1;return function(t){(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(t)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(t.substr(0,4)))&&(e=!0)}(navigator.userAgent||navigator.vendor||window.opera),e},I=function(e,t){for(var i in t)t.hasOwnProperty(i)&&(e[i]=t[i]);return e},L=function(e){if(f()){var t=e.style.width,i=e.style.height;e.style.width=parseInt(t)+1+"px",e.style.height=parseInt(i)+"px",setTimeout((function(){e.style.width=t,e.style.height=i}),100)}window.canvas=e},O=function(){var e=Math.PI/180,t=.25*Math.PI;function i(i,r,n,s){var a=Math.tan(r?r.upDegrees*e:t),o=Math.tan(r?r.downDegrees*e:t),l=Math.tan(r?r.leftDegrees*e:t),c=Math.tan(r?r.rightDegrees*e:t),h=2/(l+c),u=2/(a+o);return i[0]=h,i[1]=0,i[2]=0,i[3]=0,i[4]=0,i[5]=u,i[6]=0,i[7]=0,i[8]=-(l-c)*h*.5,i[9]=(a-o)*u*.5,i[10]=s/(n-s),i[11]=-1,i[12]=0,i[13]=0,i[14]=s*n/(n-s),i[15]=0,i}function r(e,t,i){var r=t[0],n=t[1],s=t[2],a=t[3],o=r+r,l=n+n,c=s+s,h=r*o,u=r*l,d=r*c,A=n*l,p=n*c,f=s*c,m=a*o,g=a*l,v=a*c;return e[0]=1-(A+f),e[1]=u+v,e[2]=d-g,e[3]=0,e[4]=u-v,e[5]=1-(h+f),e[6]=p+m,e[7]=0,e[8]=d+g,e[9]=p-m,e[10]=1-(h+A),e[11]=0,e[12]=i[0],e[13]=i[1],e[14]=i[2],e[15]=1,e}function n(e,t,i){var r,n,s,a,o,l,c,h,u,d,A,p,f=i[0],m=i[1],g=i[2];return t===e?(e[12]=t[0]*f+t[4]*m+t[8]*g+t[12],e[13]=t[1]*f+t[5]*m+t[9]*g+t[13],e[14]=t[2]*f+t[6]*m+t[10]*g+t[14],e[15]=t[3]*f+t[7]*m+t[11]*g+t[15]):(r=t[0],n=t[1],s=t[2],a=t[3],o=t[4],l=t[5],c=t[6],h=t[7],u=t[8],d=t[9],A=t[10],p=t[11],e[0]=r,e[1]=n,e[2]=s,e[3]=a,e[4]=o,e[5]=l,e[6]=c,e[7]=h,e[8]=u,e[9]=d,e[10]=A,e[11]=p,e[12]=r*f+o*m+u*g+t[12],e[13]=n*f+l*m+d*g+t[13],e[14]=s*f+c*m+A*g+t[14],e[15]=a*f+h*m+p*g+t[15]),e}function s(e,t){var i=t[0],r=t[1],n=t[2],s=t[3],a=t[4],o=t[5],l=t[6],c=t[7],h=t[8],u=t[9],d=t[10],A=t[11],p=t[12],f=t[13],m=t[14],g=t[15],v=i*o-r*a,w=i*l-n*a,y=i*c-s*a,b=r*l-n*o,E=r*c-s*o,x=n*c-s*l,M=h*f-u*p,S=h*m-d*p,_=h*g-A*p,R=u*m-d*f,F=u*g-A*f,T=d*g-A*m,P=v*T-w*F+y*R+b*_-E*S+x*M;return P?(P=1/P,e[0]=(o*T-l*F+c*R)*P,e[1]=(n*F-r*T-s*R)*P,e[2]=(f*x-m*E+g*b)*P,e[3]=(d*E-u*x-A*b)*P,e[4]=(l*_-a*T-c*S)*P,e[5]=(i*T-n*_+s*S)*P,e[6]=(m*y-p*x-g*w)*P,e[7]=(h*x-d*y+A*w)*P,e[8]=(a*F-o*_+c*M)*P,e[9]=(r*_-i*F-s*M)*P,e[10]=(p*E-f*y+g*v)*P,e[11]=(u*y-h*E-A*v)*P,e[12]=(o*S-a*R-l*M)*P,e[13]=(i*R-r*S+n*M)*P,e[14]=(f*w-p*b-m*v)*P,e[15]=(h*b-u*w+d*v)*P,e):null}var a=new Float32Array([0,0,0,1]),o=new Float32Array([0,0,0]);function l(e,t,l,c,h,u){i(e,c||null,u.depthNear,u.depthFar),r(t,l.orientation||a,l.position||o),h&&n(t,t,h),s(t,t)}return function(e,t,i){return!(!e||!t||(e.pose=t,e.timestamp=t.timestamp,l(e.leftProjectionMatrix,e.leftViewMatrix,t,i._getFieldOfView("left"),i._getEyeOffset("left"),i),l(e.rightProjectionMatrix,e.rightViewMatrix,t,i._getFieldOfView("right"),i._getEyeOffset("right"),i),0))}}(),N=function(){var e=window.self!==window.top,t=G(document.referrer),i=G(window.location.href);return e&&t!==i},G=function(e){var t,i=e.indexOf("://");t=-1!==i?i+3:0;var r=e.indexOf("/",t);return-1===r&&(r=e.length),e.substring(0,r)},V=function(e){return e.w>1?(console.warn("getQuaternionAngle: w > 1"),0):2*Math.acos(e.w)},k=(e={},function(t,i){void 0===e[t]&&(console.warn("webvr-polyfill: "+i),e[t]=!0)}),z=function(e,t){k(e,e+" has been deprecated. This may not work on native WebVR displays. "+(t?"Please use "+t+" instead.":""))};function Q(e,t,i){if(t){for(var r=[],n=null,s=0;s<t.length;++s)switch(a=t[s]){case e.TEXTURE_BINDING_2D:case e.TEXTURE_BINDING_CUBE_MAP:if((l=t[++s])<e.TEXTURE0||l>e.TEXTURE31){console.error("TEXTURE_BINDING_2D or TEXTURE_BINDING_CUBE_MAP must be followed by a valid texture unit"),r.push(null,null);break}n||(n=e.getParameter(e.ACTIVE_TEXTURE)),e.activeTexture(l),r.push(e.getParameter(a),null);break;case e.ACTIVE_TEXTURE:n=e.getParameter(e.ACTIVE_TEXTURE),r.push(null);break;default:r.push(e.getParameter(a))}for(i(e),s=0;s<t.length;++s){var a=t[s],o=r[s];switch(a){case e.ACTIVE_TEXTURE:break;case e.ARRAY_BUFFER_BINDING:e.bindBuffer(e.ARRAY_BUFFER,o);break;case e.COLOR_CLEAR_VALUE:e.clearColor(o[0],o[1],o[2],o[3]);break;case e.COLOR_WRITEMASK:e.colorMask(o[0],o[1],o[2],o[3]);break;case e.CURRENT_PROGRAM:e.useProgram(o);break;case e.ELEMENT_ARRAY_BUFFER_BINDING:e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,o);break;case e.FRAMEBUFFER_BINDING:e.bindFramebuffer(e.FRAMEBUFFER,o);break;case e.RENDERBUFFER_BINDING:e.bindRenderbuffer(e.RENDERBUFFER,o);break;case e.TEXTURE_BINDING_2D:if((l=t[++s])<e.TEXTURE0||l>e.TEXTURE31)break;e.activeTexture(l),e.bindTexture(e.TEXTURE_2D,o);break;case e.TEXTURE_BINDING_CUBE_MAP:var l;if((l=t[++s])<e.TEXTURE0||l>e.TEXTURE31)break;e.activeTexture(l),e.bindTexture(e.TEXTURE_CUBE_MAP,o);break;case e.VIEWPORT:e.viewport(o[0],o[1],o[2],o[3]);break;case e.BLEND:case e.CULL_FACE:case e.DEPTH_TEST:case e.SCISSOR_TEST:case e.STENCIL_TEST:o?e.enable(a):e.disable(a);break;default:console.log("No GL restore behavior for 0x"+a.toString(16))}n&&e.activeTexture(n)}}else i(e)}var U=Q,X=["attribute vec2 position;","attribute vec3 texCoord;","varying vec2 vTexCoord;","uniform vec4 viewportOffsetScale[2];","void main() {"," vec4 viewport = viewportOffsetScale[int(texCoord.z)];"," vTexCoord = (texCoord.xy * viewport.zw) + viewport.xy;"," gl_Position = vec4( position, 1.0, 1.0 );","}"].join("\n"),H=["precision mediump float;","uniform sampler2D diffuse;","varying vec2 vTexCoord;","void main() {"," gl_FragColor = texture2D(diffuse, vTexCoord);","}"].join("\n");function W(e,t,i,r){this.gl=e,this.cardboardUI=t,this.bufferScale=i,this.dirtySubmitFrameBindings=r,this.ctxAttribs=e.getContextAttributes(),this.instanceExt=e.getExtension("ANGLE_instanced_arrays"),this.meshWidth=20,this.meshHeight=20,this.bufferWidth=e.drawingBufferWidth,this.bufferHeight=e.drawingBufferHeight,this.realBindFramebuffer=e.bindFramebuffer,this.realEnable=e.enable,this.realDisable=e.disable,this.realColorMask=e.colorMask,this.realClearColor=e.clearColor,this.realViewport=e.viewport,f()||(this.realCanvasWidth=Object.getOwnPropertyDescriptor(e.canvas.__proto__,"width"),this.realCanvasHeight=Object.getOwnPropertyDescriptor(e.canvas.__proto__,"height")),this.isPatched=!1,this.lastBoundFramebuffer=null,this.cullFace=!1,this.depthTest=!1,this.blend=!1,this.scissorTest=!1,this.stencilTest=!1,this.viewport=[0,0,0,0],this.colorMask=[!0,!0,!0,!0],this.clearColor=[0,0,0,0],this.attribs={position:0,texCoord:1},this.program=P(e,X,H,this.attribs),this.uniforms=C(e,this.program),this.viewportOffsetScale=new Float32Array(8),this.setTextureBounds(),this.vertexBuffer=e.createBuffer(),this.indexBuffer=e.createBuffer(),this.indexCount=0,this.renderTarget=e.createTexture(),this.framebuffer=e.createFramebuffer(),this.depthStencilBuffer=null,this.depthBuffer=null,this.stencilBuffer=null,this.ctxAttribs.depth&&this.ctxAttribs.stencil?this.depthStencilBuffer=e.createRenderbuffer():this.ctxAttribs.depth?this.depthBuffer=e.createRenderbuffer():this.ctxAttribs.stencil&&(this.stencilBuffer=e.createRenderbuffer()),this.patch(),this.onResize()}W.prototype.destroy=function(){var e=this.gl;this.unpatch(),e.deleteProgram(this.program),e.deleteBuffer(this.vertexBuffer),e.deleteBuffer(this.indexBuffer),e.deleteTexture(this.renderTarget),e.deleteFramebuffer(this.framebuffer),this.depthStencilBuffer&&e.deleteRenderbuffer(this.depthStencilBuffer),this.depthBuffer&&e.deleteRenderbuffer(this.depthBuffer),this.stencilBuffer&&e.deleteRenderbuffer(this.stencilBuffer),this.cardboardUI&&this.cardboardUI.destroy()},W.prototype.onResize=function(){var e=this.gl,t=this,i=[e.RENDERBUFFER_BINDING,e.TEXTURE_BINDING_2D,e.TEXTURE0];U(e,i,(function(e){t.realBindFramebuffer.call(e,e.FRAMEBUFFER,null),t.scissorTest&&t.realDisable.call(e,e.SCISSOR_TEST),t.realColorMask.call(e,!0,!0,!0,!0),t.realViewport.call(e,0,0,e.drawingBufferWidth,e.drawingBufferHeight),t.realClearColor.call(e,0,0,0,1),e.clear(e.COLOR_BUFFER_BIT),t.realBindFramebuffer.call(e,e.FRAMEBUFFER,t.framebuffer),e.bindTexture(e.TEXTURE_2D,t.renderTarget),e.texImage2D(e.TEXTURE_2D,0,t.ctxAttribs.alpha?e.RGBA:e.RGB,t.bufferWidth,t.bufferHeight,0,t.ctxAttribs.alpha?e.RGBA:e.RGB,e.UNSIGNED_BYTE,null),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,t.renderTarget,0),t.ctxAttribs.depth&&t.ctxAttribs.stencil?(e.bindRenderbuffer(e.RENDERBUFFER,t.depthStencilBuffer),e.renderbufferStorage(e.RENDERBUFFER,e.DEPTH_STENCIL,t.bufferWidth,t.bufferHeight),e.framebufferRenderbuffer(e.FRAMEBUFFER,e.DEPTH_STENCIL_ATTACHMENT,e.RENDERBUFFER,t.depthStencilBuffer)):t.ctxAttribs.depth?(e.bindRenderbuffer(e.RENDERBUFFER,t.depthBuffer),e.renderbufferStorage(e.RENDERBUFFER,e.DEPTH_COMPONENT16,t.bufferWidth,t.bufferHeight),e.framebufferRenderbuffer(e.FRAMEBUFFER,e.DEPTH_ATTACHMENT,e.RENDERBUFFER,t.depthBuffer)):t.ctxAttribs.stencil&&(e.bindRenderbuffer(e.RENDERBUFFER,t.stencilBuffer),e.renderbufferStorage(e.RENDERBUFFER,e.STENCIL_INDEX8,t.bufferWidth,t.bufferHeight),e.framebufferRenderbuffer(e.FRAMEBUFFER,e.STENCIL_ATTACHMENT,e.RENDERBUFFER,t.stencilBuffer)),!e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE&&console.error("Framebuffer incomplete!"),t.realBindFramebuffer.call(e,e.FRAMEBUFFER,t.lastBoundFramebuffer),t.scissorTest&&t.realEnable.call(e,e.SCISSOR_TEST),t.realColorMask.apply(e,t.colorMask),t.realViewport.apply(e,t.viewport),t.realClearColor.apply(e,t.clearColor)})),this.cardboardUI&&this.cardboardUI.onResize()},W.prototype.patch=function(){if(!this.isPatched){var e=this,t=this.gl.canvas,i=this.gl;f()||(t.width=S()*this.bufferScale,t.height=_()*this.bufferScale,Object.defineProperty(t,"width",{configurable:!0,enumerable:!0,get:function(){return e.bufferWidth},set:function(i){e.bufferWidth=i,e.realCanvasWidth.set.call(t,i),e.onResize()}}),Object.defineProperty(t,"height",{configurable:!0,enumerable:!0,get:function(){return e.bufferHeight},set:function(i){e.bufferHeight=i,e.realCanvasHeight.set.call(t,i),e.onResize()}})),this.lastBoundFramebuffer=i.getParameter(i.FRAMEBUFFER_BINDING),null==this.lastBoundFramebuffer&&(this.lastBoundFramebuffer=this.framebuffer,this.gl.bindFramebuffer(i.FRAMEBUFFER,this.framebuffer)),this.gl.bindFramebuffer=function(t,r){e.lastBoundFramebuffer=r||e.framebuffer,e.realBindFramebuffer.call(i,t,e.lastBoundFramebuffer)},this.cullFace=i.getParameter(i.CULL_FACE),this.depthTest=i.getParameter(i.DEPTH_TEST),this.blend=i.getParameter(i.BLEND),this.scissorTest=i.getParameter(i.SCISSOR_TEST),this.stencilTest=i.getParameter(i.STENCIL_TEST),i.enable=function(t){switch(t){case i.CULL_FACE:e.cullFace=!0;break;case i.DEPTH_TEST:e.depthTest=!0;break;case i.BLEND:e.blend=!0;break;case i.SCISSOR_TEST:e.scissorTest=!0;break;case i.STENCIL_TEST:e.stencilTest=!0}e.realEnable.call(i,t)},i.disable=function(t){switch(t){case i.CULL_FACE:e.cullFace=!1;break;case i.DEPTH_TEST:e.depthTest=!1;break;case i.BLEND:e.blend=!1;break;case i.SCISSOR_TEST:e.scissorTest=!1;break;case i.STENCIL_TEST:e.stencilTest=!1}e.realDisable.call(i,t)},this.colorMask=i.getParameter(i.COLOR_WRITEMASK),i.colorMask=function(t,r,n,s){e.colorMask[0]=t,e.colorMask[1]=r,e.colorMask[2]=n,e.colorMask[3]=s,e.realColorMask.call(i,t,r,n,s)},this.clearColor=i.getParameter(i.COLOR_CLEAR_VALUE),i.clearColor=function(t,r,n,s){e.clearColor[0]=t,e.clearColor[1]=r,e.clearColor[2]=n,e.clearColor[3]=s,e.realClearColor.call(i,t,r,n,s)},this.viewport=i.getParameter(i.VIEWPORT),i.viewport=function(t,r,n,s){e.viewport[0]=t,e.viewport[1]=r,e.viewport[2]=n,e.viewport[3]=s,e.realViewport.call(i,t,r,n,s)},this.isPatched=!0,L(t)}},W.prototype.unpatch=function(){if(this.isPatched){var e=this.gl,t=this.gl.canvas;f()||(Object.defineProperty(t,"width",this.realCanvasWidth),Object.defineProperty(t,"height",this.realCanvasHeight)),t.width=this.bufferWidth,t.height=this.bufferHeight,e.bindFramebuffer=this.realBindFramebuffer,e.enable=this.realEnable,e.disable=this.realDisable,e.colorMask=this.realColorMask,e.clearColor=this.realClearColor,e.viewport=this.realViewport,this.lastBoundFramebuffer==this.framebuffer&&e.bindFramebuffer(e.FRAMEBUFFER,null),this.isPatched=!1,setTimeout((function(){L(t)}),1)}},W.prototype.setTextureBounds=function(e,t){e||(e=[0,0,.5,1]),t||(t=[.5,0,.5,1]),this.viewportOffsetScale[0]=e[0],this.viewportOffsetScale[1]=e[1],this.viewportOffsetScale[2]=e[2],this.viewportOffsetScale[3]=e[3],this.viewportOffsetScale[4]=t[0],this.viewportOffsetScale[5]=t[1],this.viewportOffsetScale[6]=t[2],this.viewportOffsetScale[7]=t[3]},W.prototype.submitFrame=function(){var e=this.gl,t=this,i=[];if(this.dirtySubmitFrameBindings||i.push(e.CURRENT_PROGRAM,e.ARRAY_BUFFER_BINDING,e.ELEMENT_ARRAY_BUFFER_BINDING,e.TEXTURE_BINDING_2D,e.TEXTURE0),U(e,i,(function(e){t.realBindFramebuffer.call(e,e.FRAMEBUFFER,null);var i=0,r=0;t.instanceExt&&(i=e.getVertexAttrib(t.attribs.position,t.instanceExt.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE),r=e.getVertexAttrib(t.attribs.texCoord,t.instanceExt.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE)),t.cullFace&&t.realDisable.call(e,e.CULL_FACE),t.depthTest&&t.realDisable.call(e,e.DEPTH_TEST),t.blend&&t.realDisable.call(e,e.BLEND),t.scissorTest&&t.realDisable.call(e,e.SCISSOR_TEST),t.stencilTest&&t.realDisable.call(e,e.STENCIL_TEST),t.realColorMask.call(e,!0,!0,!0,!0),t.realViewport.call(e,0,0,e.drawingBufferWidth,e.drawingBufferHeight),(t.ctxAttribs.alpha||f())&&(t.realClearColor.call(e,0,0,0,1),e.clear(e.COLOR_BUFFER_BIT)),e.useProgram(t.program),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t.indexBuffer),e.bindBuffer(e.ARRAY_BUFFER,t.vertexBuffer),e.enableVertexAttribArray(t.attribs.position),e.enableVertexAttribArray(t.attribs.texCoord),e.vertexAttribPointer(t.attribs.position,2,e.FLOAT,!1,20,0),e.vertexAttribPointer(t.attribs.texCoord,3,e.FLOAT,!1,20,8),t.instanceExt&&(0!=i&&t.instanceExt.vertexAttribDivisorANGLE(t.attribs.position,0),0!=r&&t.instanceExt.vertexAttribDivisorANGLE(t.attribs.texCoord,0)),e.activeTexture(e.TEXTURE0),e.uniform1i(t.uniforms.diffuse,0),e.bindTexture(e.TEXTURE_2D,t.renderTarget),e.uniform4fv(t.uniforms.viewportOffsetScale,t.viewportOffsetScale),e.drawElements(e.TRIANGLES,t.indexCount,e.UNSIGNED_SHORT,0),t.cardboardUI&&t.cardboardUI.renderNoState(),t.realBindFramebuffer.call(t.gl,e.FRAMEBUFFER,t.framebuffer),t.ctxAttribs.preserveDrawingBuffer||(t.realClearColor.call(e,0,0,0,0),e.clear(e.COLOR_BUFFER_BIT)),t.dirtySubmitFrameBindings||t.realBindFramebuffer.call(e,e.FRAMEBUFFER,t.lastBoundFramebuffer),t.cullFace&&t.realEnable.call(e,e.CULL_FACE),t.depthTest&&t.realEnable.call(e,e.DEPTH_TEST),t.blend&&t.realEnable.call(e,e.BLEND),t.scissorTest&&t.realEnable.call(e,e.SCISSOR_TEST),t.stencilTest&&t.realEnable.call(e,e.STENCIL_TEST),t.realColorMask.apply(e,t.colorMask),t.realViewport.apply(e,t.viewport),!t.ctxAttribs.alpha&&t.ctxAttribs.preserveDrawingBuffer||t.realClearColor.apply(e,t.clearColor),t.instanceExt&&(0!=i&&t.instanceExt.vertexAttribDivisorANGLE(t.attribs.position,i),0!=r&&t.instanceExt.vertexAttribDivisorANGLE(t.attribs.texCoord,r))})),f()){var r=e.canvas;r.width==t.bufferWidth&&r.height==t.bufferHeight||(t.bufferWidth=r.width,t.bufferHeight=r.height,t.onResize())}},W.prototype.updateDeviceInfo=function(e){var t=this.gl,i=this,r=[t.ARRAY_BUFFER_BINDING,t.ELEMENT_ARRAY_BUFFER_BINDING];U(t,r,(function(t){var r=i.computeMeshVertices_(i.meshWidth,i.meshHeight,e);if(t.bindBuffer(t.ARRAY_BUFFER,i.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,r,t.STATIC_DRAW),!i.indexCount){var n=i.computeMeshIndices_(i.meshWidth,i.meshHeight);t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,i.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,n,t.STATIC_DRAW),i.indexCount=n.length}}))},W.prototype.computeMeshVertices_=function(e,t,i){for(var r=new Float32Array(2*e*t*5),n=i.getLeftEyeVisibleTanAngles(),s=i.getLeftEyeNoLensTanAngles(),a=i.getLeftEyeVisibleScreenRect(s),o=0,l=0;l<2;l++){for(var c=0;c<t;c++)for(var h=0;h<e;h++,o++){var u=h/(e-1),d=c/(t-1),A=u,f=d,m=p(n[0],n[2],u),g=p(n[3],n[1],d),v=Math.sqrt(m*m+g*g),w=i.distortion.distortInverse(v),y=g*w/v;u=(m*w/v-s[0])/(s[2]-s[0]),d=(y-s[3])/(s[1]-s[3]),u=2*(a.x+u*a.width-.5),d=2*(a.y+d*a.height-.5),r[5*o+0]=u,r[5*o+1]=d,r[5*o+2]=A,r[5*o+3]=f,r[5*o+4]=l}var b=n[2]-n[0];n[0]=-(b+n[0]),n[2]=b-n[2],b=s[2]-s[0],s[0]=-(b+s[0]),s[2]=b-s[2],a.x=1-(a.x+a.width)}return r},W.prototype.computeMeshIndices_=function(e,t){for(var i=new Uint16Array(2*(e-1)*(t-1)*6),r=e/2,n=t/2,s=0,a=0,o=0;o<2;o++)for(var l=0;l<t;l++)for(var c=0;c<e;c++,s++)0!=c&&0!=l&&(c<=r==l<=n?(i[a++]=s,i[a++]=s-e-1,i[a++]=s-e,i[a++]=s-e-1,i[a++]=s,i[a++]=s-1):(i[a++]=s-1,i[a++]=s-e,i[a++]=s,i[a++]=s-e,i[a++]=s-1,i[a++]=s-e-1));return i},W.prototype.getOwnPropertyDescriptor_=function(e,t){var i=Object.getOwnPropertyDescriptor(e,t);return void 0!==i.get&&void 0!==i.set||(i.configurable=!0,i.enumerable=!0,i.get=function(){return this.getAttribute(t)},i.set=function(e){this.setAttribute(t,e)}),i};var q=["attribute vec2 position;","uniform mat4 projectionMat;","void main() {"," gl_Position = projectionMat * vec4( position, -1.0, 1.0 );","}"].join("\n"),j=["precision mediump float;","uniform vec4 color;","void main() {"," gl_FragColor = color;","}"].join("\n"),Y=Math.PI/180,Z=60,$=12,K=20,J=1,ee=.75,te=.3125,ie=4,re=28,ne=1.5;function se(e){this.gl=e,this.attribs={position:0},this.program=P(e,q,j,this.attribs),this.uniforms=C(e,this.program),this.vertexBuffer=e.createBuffer(),this.gearOffset=0,this.gearVertexCount=0,this.arrowOffset=0,this.arrowVertexCount=0,this.projMat=new Float32Array(16),this.listener=null,this.onResize()}function ae(e){this.coefficients=e}se.prototype.destroy=function(){var e=this.gl;this.listener&&e.canvas.removeEventListener("click",this.listener,!1),e.deleteProgram(this.program),e.deleteBuffer(this.vertexBuffer)},se.prototype.listen=function(e,t){var i=this.gl.canvas;this.listener=function(r){var n=i.clientWidth/2,s=re*ne;r.clientX>n-s&&r.clientX<n+s&&r.clientY>i.clientHeight-s?e(r):r.clientX<s&&r.clientY<s&&t(r)},i.addEventListener("click",this.listener,!1)},se.prototype.onResize=function(){var e=this.gl,t=this,i=[e.ARRAY_BUFFER_BINDING];U(e,i,(function(e){var i=[],r=e.drawingBufferWidth/2,n=Math.max(screen.width,screen.height)*window.devicePixelRatio,s=e.drawingBufferWidth/n*window.devicePixelRatio,a=ie*s/2,o=re*ne*s,l=re*s/2,c=(re*ne-re)*s;function h(e,t){var n=(90-e)*Y,s=Math.cos(n),a=Math.sin(n);i.push(te*s*l+r,te*a*l+l),i.push(t*s*l+r,t*a*l+l)}i.push(r-a,o),i.push(r-a,e.drawingBufferHeight),i.push(r+a,o),i.push(r+a,e.drawingBufferHeight),t.gearOffset=i.length/2;for(var u=0;u<=6;u++){var d=u*Z;h(d,J),h(d+$,J),h(d+K,ee),h(d+(Z-K),ee),h(d+(Z-$),J)}function A(t,r){i.push(c+t,e.drawingBufferHeight-c-r)}t.gearVertexCount=i.length/2-t.gearOffset,t.arrowOffset=i.length/2;var p=a/Math.sin(45*Y);A(0,l),A(l,0),A(l+p,p),A(p,l+p),A(p,l-p),A(0,l),A(l,2*l),A(l+p,2*l-p),A(p,l-p),A(0,l),A(p,l-a),A(re*s,l-a),A(p,l+a),A(re*s,l+a),t.arrowVertexCount=i.length/2-t.arrowOffset,e.bindBuffer(e.ARRAY_BUFFER,t.vertexBuffer),e.bufferData(e.ARRAY_BUFFER,new Float32Array(i),e.STATIC_DRAW)}))},se.prototype.render=function(){var e=this.gl,t=this,i=[e.CULL_FACE,e.DEPTH_TEST,e.BLEND,e.SCISSOR_TEST,e.STENCIL_TEST,e.COLOR_WRITEMASK,e.VIEWPORT,e.CURRENT_PROGRAM,e.ARRAY_BUFFER_BINDING];U(e,i,(function(e){e.disable(e.CULL_FACE),e.disable(e.DEPTH_TEST),e.disable(e.BLEND),e.disable(e.SCISSOR_TEST),e.disable(e.STENCIL_TEST),e.colorMask(!0,!0,!0,!0),e.viewport(0,0,e.drawingBufferWidth,e.drawingBufferHeight),t.renderNoState()}))},se.prototype.renderNoState=function(){var e=this.gl;e.useProgram(this.program),e.bindBuffer(e.ARRAY_BUFFER,this.vertexBuffer),e.enableVertexAttribArray(this.attribs.position),e.vertexAttribPointer(this.attribs.position,2,e.FLOAT,!1,8,0),e.uniform4f(this.uniforms.color,1,1,1,1),B(this.projMat,0,e.drawingBufferWidth,0,e.drawingBufferHeight,.1,1024),e.uniformMatrix4fv(this.uniforms.projectionMat,!1,this.projMat),e.drawArrays(e.TRIANGLE_STRIP,0,4),e.drawArrays(e.TRIANGLE_STRIP,this.gearOffset,this.gearVertexCount),e.drawArrays(e.TRIANGLE_STRIP,this.arrowOffset,this.arrowVertexCount)},ae.prototype.distortInverse=function(e){for(var t=0,i=1,r=e-this.distort(t);Math.abs(i-t)>1e-4;){var n=e-this.distort(i),s=i-n*((i-t)/(n-r));t=i,i=s,r=n}return i},ae.prototype.distort=function(e){for(var t=e*e,i=0,r=0;r<this.coefficients.length;r++)i=t*(i+this.coefficients[r]);return(i+1)*e};var oe=Math.PI/180,le=180/Math.PI,ce=function(e,t,i){this.x=e||0,this.y=t||0,this.z=i||0};ce.prototype={constructor:ce,set:function(e,t,i){return this.x=e,this.y=t,this.z=i,this},copy:function(e){return this.x=e.x,this.y=e.y,this.z=e.z,this},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},normalize:function(){var e=this.length();if(0!==e){var t=1/e;this.multiplyScalar(t)}else this.x=0,this.y=0,this.z=0;return this},multiplyScalar:function(e){this.x*=e,this.y*=e,this.z*=e},applyQuaternion:function(e){var t=this.x,i=this.y,r=this.z,n=e.x,s=e.y,a=e.z,o=e.w,l=o*t+s*r-a*i,c=o*i+a*t-n*r,h=o*r+n*i-s*t,u=-n*t-s*i-a*r;return this.x=l*o+u*-n+c*-a-h*-s,this.y=c*o+u*-s+h*-n-l*-a,this.z=h*o+u*-a+l*-s-c*-n,this},dot:function(e){return this.x*e.x+this.y*e.y+this.z*e.z},crossVectors:function(e,t){var i=e.x,r=e.y,n=e.z,s=t.x,a=t.y,o=t.z;return this.x=r*o-n*a,this.y=n*s-i*o,this.z=i*a-r*s,this}};var he,ue,de,Ae=function(e,t,i,r){this.x=e||0,this.y=t||0,this.z=i||0,this.w=void 0!==r?r:1};function pe(e){this.width=e.width||S(),this.height=e.height||_(),this.widthMeters=e.widthMeters,this.heightMeters=e.heightMeters,this.bevelMeters=e.bevelMeters}Ae.prototype={constructor:Ae,set:function(e,t,i,r){return this.x=e,this.y=t,this.z=i,this.w=r,this},copy:function(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=e.w,this},setFromEulerXYZ:function(e,t,i){var r=Math.cos(e/2),n=Math.cos(t/2),s=Math.cos(i/2),a=Math.sin(e/2),o=Math.sin(t/2),l=Math.sin(i/2);return this.x=a*n*s+r*o*l,this.y=r*o*s-a*n*l,this.z=r*n*l+a*o*s,this.w=r*n*s-a*o*l,this},setFromEulerYXZ:function(e,t,i){var r=Math.cos(e/2),n=Math.cos(t/2),s=Math.cos(i/2),a=Math.sin(e/2),o=Math.sin(t/2),l=Math.sin(i/2);return this.x=a*n*s+r*o*l,this.y=r*o*s-a*n*l,this.z=r*n*l-a*o*s,this.w=r*n*s+a*o*l,this},setFromAxisAngle:function(e,t){var i=t/2,r=Math.sin(i);return this.x=e.x*r,this.y=e.y*r,this.z=e.z*r,this.w=Math.cos(i),this},multiply:function(e){return this.multiplyQuaternions(this,e)},multiplyQuaternions:function(e,t){var i=e.x,r=e.y,n=e.z,s=e.w,a=t.x,o=t.y,l=t.z,c=t.w;return this.x=i*c+s*a+r*l-n*o,this.y=r*c+s*o+n*a-i*l,this.z=n*c+s*l+i*o-r*a,this.w=s*c-i*a-r*o-n*l,this},inverse:function(){return this.x*=-1,this.y*=-1,this.z*=-1,this.normalize(),this},normalize:function(){var e=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);return 0===e?(this.x=0,this.y=0,this.z=0,this.w=1):(e=1/e,this.x=this.x*e,this.y=this.y*e,this.z=this.z*e,this.w=this.w*e),this},slerp:function(e,t){if(0===t)return this;if(1===t)return this.copy(e);var i=this.x,r=this.y,n=this.z,s=this.w,a=s*e.w+i*e.x+r*e.y+n*e.z;if(a<0?(this.w=-e.w,this.x=-e.x,this.y=-e.y,this.z=-e.z,a=-a):this.copy(e),a>=1)return this.w=s,this.x=i,this.y=r,this.z=n,this;var o=Math.acos(a),l=Math.sqrt(1-a*a);if(Math.abs(l)<.001)return this.w=.5*(s+this.w),this.x=.5*(i+this.x),this.y=.5*(r+this.y),this.z=.5*(n+this.z),this;var c=Math.sin((1-t)*o)/l,h=Math.sin(t*o)/l;return this.w=s*c+this.w*h,this.x=i*c+this.x*h,this.y=r*c+this.y*h,this.z=n*c+this.z*h,this},setFromUnitVectors:(de=1e-6,function(e,t){return void 0===he&&(he=new ce),(ue=e.dot(t)+1)<de?(ue=0,Math.abs(e.x)>Math.abs(e.z)?he.set(-e.y,e.x,0):he.set(0,-e.z,e.y)):he.crossVectors(e,t),this.x=he.x,this.y=he.y,this.z=he.z,this.w=ue,this.normalize(),this})};var fe=new pe({widthMeters:.11,heightMeters:.062,bevelMeters:.004}),me=new pe({widthMeters:.1038,heightMeters:.0584,bevelMeters:.004}),ge={CardboardV1:new we({id:"CardboardV1",label:"Cardboard I/O 2014",fov:40,interLensDistance:.06,baselineLensDistance:.035,screenLensDistance:.042,distortionCoefficients:[.441,.156],inverseCoefficients:[-.4410035,.42756155,-.4804439,.5460139,-.58821183,.5733938,-.48303202,.33299083,-.17573841,.0651772,-.01488963,.001559834]}),CardboardV2:new we({id:"CardboardV2",label:"Cardboard I/O 2015",fov:60,interLensDistance:.064,baselineLensDistance:.035,screenLensDistance:.039,distortionCoefficients:[.34,.55],inverseCoefficients:[-.33836704,-.18162185,.862655,-1.2462051,1.0560602,-.58208317,.21609078,-.05444823,.009177956,-.0009904169,6183535e-11,-16981803e-13]})};function ve(e,t){this.viewer=ge.CardboardV2,this.updateDeviceParams(e),this.distortion=new ae(this.viewer.distortionCoefficients);for(var i=0;i<t.length;i++){var r=t[i];ge[r.id]=new we(r)}}function we(e){this.id=e.id,this.label=e.label,this.fov=e.fov,this.interLensDistance=e.interLensDistance,this.baselineLensDistance=e.baselineLensDistance,this.screenLensDistance=e.screenLensDistance,this.distortionCoefficients=e.distortionCoefficients,this.inverseCoefficients=e.inverseCoefficients}ve.prototype.updateDeviceParams=function(e){this.device=this.determineDevice_(e)||this.device},ve.prototype.getDevice=function(){return this.device},ve.prototype.setViewer=function(e){this.viewer=e,this.distortion=new ae(this.viewer.distortionCoefficients)},ve.prototype.determineDevice_=function(e){if(!e)return f()?(console.warn("Using fallback iOS device measurements."),me):(console.warn("Using fallback Android device measurements."),fe);var t=.0254,i=t/e.xdpi,r=t/e.ydpi;return new pe({widthMeters:i*S(),heightMeters:r*_(),bevelMeters:.001*e.bevelMm})},ve.prototype.getDistortedFieldOfViewLeftEye=function(){var e=this.viewer,t=this.device,i=this.distortion,r=e.screenLensDistance,n=(t.widthMeters-e.interLensDistance)/2,s=e.interLensDistance/2,a=e.baselineLensDistance-t.bevelMeters,o=t.heightMeters-a,l=le*Math.atan(i.distort(n/r)),c=le*Math.atan(i.distort(s/r)),h=le*Math.atan(i.distort(a/r)),u=le*Math.atan(i.distort(o/r));return{leftDegrees:Math.min(l,e.fov),rightDegrees:Math.min(c,e.fov),downDegrees:Math.min(h,e.fov),upDegrees:Math.min(u,e.fov)}},ve.prototype.getLeftEyeVisibleTanAngles=function(){var e=this.viewer,t=this.device,i=this.distortion,r=Math.tan(-oe*e.fov),n=Math.tan(oe*e.fov),s=Math.tan(oe*e.fov),a=Math.tan(-oe*e.fov),o=t.widthMeters/4,l=t.heightMeters/2,c=e.baselineLensDistance-t.bevelMeters-l,h=e.interLensDistance/2-o,u=-c,d=e.screenLensDistance,A=i.distort((h-o)/d),p=i.distort((u+l)/d),f=i.distort((h+o)/d),m=i.distort((u-l)/d),g=new Float32Array(4);return g[0]=Math.max(r,A),g[1]=Math.min(n,p),g[2]=Math.min(s,f),g[3]=Math.max(a,m),g},ve.prototype.getLeftEyeNoLensTanAngles=function(){var e=this.viewer,t=this.device,i=this.distortion,r=new Float32Array(4),n=i.distortInverse(Math.tan(-oe*e.fov)),s=i.distortInverse(Math.tan(oe*e.fov)),a=i.distortInverse(Math.tan(oe*e.fov)),o=i.distortInverse(Math.tan(-oe*e.fov)),l=t.widthMeters/4,c=t.heightMeters/2,h=e.baselineLensDistance-t.bevelMeters-c,u=e.interLensDistance/2-l,d=-h,A=e.screenLensDistance,p=(u-l)/A,f=(d+c)/A,m=(u+l)/A,g=(d-c)/A;return r[0]=Math.max(n,p),r[1]=Math.min(s,f),r[2]=Math.min(a,m),r[3]=Math.max(o,g),r},ve.prototype.getLeftEyeVisibleScreenRect=function(e){var t=this.viewer,i=this.device,r=t.screenLensDistance,n=(i.widthMeters-t.interLensDistance)/2,s=t.baselineLensDistance-i.bevelMeters,a=(e[0]*r+n)/i.widthMeters,o=(e[1]*r+s)/i.heightMeters,l=(e[2]*r+n)/i.widthMeters,c=(e[3]*r+s)/i.heightMeters;return{x:a,y:c,width:l-a,height:o-c}},ve.prototype.getFieldOfViewLeftEye=function(e){return e?this.getUndistortedFieldOfViewLeftEye():this.getDistortedFieldOfViewLeftEye()},ve.prototype.getFieldOfViewRightEye=function(e){var t=this.getFieldOfViewLeftEye(e);return{leftDegrees:t.rightDegrees,rightDegrees:t.leftDegrees,upDegrees:t.upDegrees,downDegrees:t.downDegrees}},ve.prototype.getUndistortedFieldOfViewLeftEye=function(){var e=this.getUndistortedParams_();return{leftDegrees:le*Math.atan(e.outerDist),rightDegrees:le*Math.atan(e.innerDist),downDegrees:le*Math.atan(e.bottomDist),upDegrees:le*Math.atan(e.topDist)}},ve.prototype.getUndistortedViewportLeftEye=function(){var e=this.getUndistortedParams_(),t=this.viewer,i=this.device,r=t.screenLensDistance,n=i.widthMeters/r,s=i.heightMeters/r,a=i.width/n,o=i.height/s,l=Math.round((e.eyePosX-e.outerDist)*a),c=Math.round((e.eyePosY-e.bottomDist)*o);return{x:l,y:c,width:Math.round((e.eyePosX+e.innerDist)*a)-l,height:Math.round((e.eyePosY+e.topDist)*o)-c}},ve.prototype.getUndistortedParams_=function(){var e=this.viewer,t=this.device,i=this.distortion,r=e.screenLensDistance,n=e.interLensDistance/2/r,s=t.widthMeters/r,a=t.heightMeters/r,o=s/2-n,l=(e.baselineLensDistance-t.bevelMeters)/r,c=e.fov,h=i.distortInverse(Math.tan(oe*c)),u=Math.min(o,h),d=Math.min(n,h),A=Math.min(l,h);return{outerDist:u,innerDist:d,topDist:Math.min(a-l,h),bottomDist:A,eyePosX:o,eyePosY:l}},ve.Viewers=ge;var ye={format:1,last_updated:"2019-11-09T17:36:14Z",devices:[{type:"android",rules:[{mdmh:"asus/*/Nexus 7/*"},{ua:"Nexus 7"}],dpi:[320.8,323],bw:3,ac:500},{type:"android",rules:[{mdmh:"asus/*/ASUS_X00PD/*"},{ua:"ASUS_X00PD"}],dpi:245,bw:3,ac:500},{type:"android",rules:[{mdmh:"asus/*/ASUS_X008D/*"},{ua:"ASUS_X008D"}],dpi:282,bw:3,ac:500},{type:"android",rules:[{mdmh:"asus/*/ASUS_Z00AD/*"},{ua:"ASUS_Z00AD"}],dpi:[403,404.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Google/*/Pixel 2 XL/*"},{ua:"Pixel 2 XL"}],dpi:537.9,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Google/*/Pixel 3 XL/*"},{ua:"Pixel 3 XL"}],dpi:[558.5,553.8],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Google/*/Pixel XL/*"},{ua:"Pixel XL"}],dpi:[537.9,533],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Google/*/Pixel 3/*"},{ua:"Pixel 3"}],dpi:442.4,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Google/*/Pixel 2/*"},{ua:"Pixel 2"}],dpi:441,bw:3,ac:500},{type:"android",rules:[{mdmh:"Google/*/Pixel/*"},{ua:"Pixel"}],dpi:[432.6,436.7],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"HTC/*/HTC6435LVW/*"},{ua:"HTC6435LVW"}],dpi:[449.7,443.3],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"HTC/*/HTC One XL/*"},{ua:"HTC One XL"}],dpi:[315.3,314.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"htc/*/Nexus 9/*"},{ua:"Nexus 9"}],dpi:289,bw:3,ac:500},{type:"android",rules:[{mdmh:"HTC/*/HTC One M9/*"},{ua:"HTC One M9"}],dpi:[442.5,443.3],bw:3,ac:500},{type:"android",rules:[{mdmh:"HTC/*/HTC One_M8/*"},{ua:"HTC One_M8"}],dpi:[449.7,447.4],bw:3,ac:500},{type:"android",rules:[{mdmh:"HTC/*/HTC One/*"},{ua:"HTC One"}],dpi:472.8,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Huawei/*/Nexus 6P/*"},{ua:"Nexus 6P"}],dpi:[515.1,518],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Huawei/*/BLN-L24/*"},{ua:"HONORBLN-L24"}],dpi:480,bw:4,ac:500},{type:"android",rules:[{mdmh:"Huawei/*/BKL-L09/*"},{ua:"BKL-L09"}],dpi:403,bw:3.47,ac:500},{type:"android",rules:[{mdmh:"LENOVO/*/Lenovo PB2-690Y/*"},{ua:"Lenovo PB2-690Y"}],dpi:[457.2,454.713],bw:3,ac:500},{type:"android",rules:[{mdmh:"LGE/*/Nexus 5X/*"},{ua:"Nexus 5X"}],dpi:[422,419.9],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"LGE/*/LGMS345/*"},{ua:"LGMS345"}],dpi:[221.7,219.1],bw:3,ac:500},{type:"android",rules:[{mdmh:"LGE/*/LG-D800/*"},{ua:"LG-D800"}],dpi:[422,424.1],bw:3,ac:500},{type:"android",rules:[{mdmh:"LGE/*/LG-D850/*"},{ua:"LG-D850"}],dpi:[537.9,541.9],bw:3,ac:500},{type:"android",rules:[{mdmh:"LGE/*/VS985 4G/*"},{ua:"VS985 4G"}],dpi:[537.9,535.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"LGE/*/Nexus 5/*"},{ua:"Nexus 5 B"}],dpi:[442.4,444.8],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"LGE/*/Nexus 4/*"},{ua:"Nexus 4"}],dpi:[319.8,318.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"LGE/*/LG-P769/*"},{ua:"LG-P769"}],dpi:[240.6,247.5],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"LGE/*/LGMS323/*"},{ua:"LGMS323"}],dpi:[206.6,204.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"LGE/*/LGLS996/*"},{ua:"LGLS996"}],dpi:[403.4,401.5],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Micromax/*/4560MMX/*"},{ua:"4560MMX"}],dpi:[240,219.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Micromax/*/A250/*"},{ua:"Micromax A250"}],dpi:[480,446.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Micromax/*/Micromax AQ4501/*"},{ua:"Micromax AQ4501"}],dpi:240,bw:3,ac:500},{type:"android",rules:[{mdmh:"motorola/*/G5/*"},{ua:"Moto G (5) Plus"}],dpi:[403.4,403],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/DROID RAZR/*"},{ua:"DROID RAZR"}],dpi:[368.1,256.7],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/XT830C/*"},{ua:"XT830C"}],dpi:[254,255.9],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/XT1021/*"},{ua:"XT1021"}],dpi:[254,256.7],bw:3,ac:500},{type:"android",rules:[{mdmh:"motorola/*/XT1023/*"},{ua:"XT1023"}],dpi:[254,256.7],bw:3,ac:500},{type:"android",rules:[{mdmh:"motorola/*/XT1028/*"},{ua:"XT1028"}],dpi:[326.6,327.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/XT1034/*"},{ua:"XT1034"}],dpi:[326.6,328.4],bw:3,ac:500},{type:"android",rules:[{mdmh:"motorola/*/XT1053/*"},{ua:"XT1053"}],dpi:[315.3,316.1],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/XT1562/*"},{ua:"XT1562"}],dpi:[403.4,402.7],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/Nexus 6/*"},{ua:"Nexus 6 B"}],dpi:[494.3,489.7],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/XT1063/*"},{ua:"XT1063"}],dpi:[295,296.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/XT1064/*"},{ua:"XT1064"}],dpi:[295,295.6],bw:3,ac:500},{type:"android",rules:[{mdmh:"motorola/*/XT1092/*"},{ua:"XT1092"}],dpi:[422,424.1],bw:3,ac:500},{type:"android",rules:[{mdmh:"motorola/*/XT1095/*"},{ua:"XT1095"}],dpi:[422,423.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/G4/*"},{ua:"Moto G (4)"}],dpi:401,bw:4,ac:1e3},{type:"android",rules:[{mdmh:"OnePlus/*/A0001/*"},{ua:"A0001"}],dpi:[403.4,401],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"OnePlus/*/ONE E1001/*"},{ua:"ONE E1001"}],dpi:[442.4,441.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"OnePlus/*/ONE E1003/*"},{ua:"ONE E1003"}],dpi:[442.4,441.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"OnePlus/*/ONE E1005/*"},{ua:"ONE E1005"}],dpi:[442.4,441.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"OnePlus/*/ONE A2001/*"},{ua:"ONE A2001"}],dpi:[391.9,405.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"OnePlus/*/ONE A2003/*"},{ua:"ONE A2003"}],dpi:[391.9,405.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"OnePlus/*/ONE A2005/*"},{ua:"ONE A2005"}],dpi:[391.9,405.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"OnePlus/*/ONEPLUS A3000/*"},{ua:"ONEPLUS A3000"}],dpi:401,bw:3,ac:500},{type:"android",rules:[{mdmh:"OnePlus/*/ONEPLUS A3003/*"},{ua:"ONEPLUS A3003"}],dpi:401,bw:3,ac:500},{type:"android",rules:[{mdmh:"OnePlus/*/ONEPLUS A3010/*"},{ua:"ONEPLUS A3010"}],dpi:401,bw:3,ac:500},{type:"android",rules:[{mdmh:"OnePlus/*/ONEPLUS A5000/*"},{ua:"ONEPLUS A5000 "}],dpi:[403.411,399.737],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"OnePlus/*/ONE A5010/*"},{ua:"ONEPLUS A5010"}],dpi:[403,400],bw:2,ac:1e3},{type:"android",rules:[{mdmh:"OnePlus/*/ONEPLUS A6000/*"},{ua:"ONEPLUS A6000"}],dpi:401,bw:3,ac:500},{type:"android",rules:[{mdmh:"OnePlus/*/ONEPLUS A6003/*"},{ua:"ONEPLUS A6003"}],dpi:401,bw:3,ac:500},{type:"android",rules:[{mdmh:"OnePlus/*/ONEPLUS A6010/*"},{ua:"ONEPLUS A6010"}],dpi:401,bw:2,ac:500},{type:"android",rules:[{mdmh:"OnePlus/*/ONEPLUS A6013/*"},{ua:"ONEPLUS A6013"}],dpi:401,bw:2,ac:500},{type:"android",rules:[{mdmh:"OPPO/*/X909/*"},{ua:"X909"}],dpi:[442.4,444.1],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/GT-I9082/*"},{ua:"GT-I9082"}],dpi:[184.7,185.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G360P/*"},{ua:"SM-G360P"}],dpi:[196.7,205.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/Nexus S/*"},{ua:"Nexus S"}],dpi:[234.5,229.8],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/GT-I9300/*"},{ua:"GT-I9300"}],dpi:[304.8,303.9],bw:5,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-T230NU/*"},{ua:"SM-T230NU"}],dpi:216,bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SGH-T399/*"},{ua:"SGH-T399"}],dpi:[217.7,231.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SGH-M919/*"},{ua:"SGH-M919"}],dpi:[440.8,437.7],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-N9005/*"},{ua:"SM-N9005"}],dpi:[386.4,387],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SAMSUNG-SM-N900A/*"},{ua:"SAMSUNG-SM-N900A"}],dpi:[386.4,387.7],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/GT-I9500/*"},{ua:"GT-I9500"}],dpi:[442.5,443.3],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/GT-I9505/*"},{ua:"GT-I9505"}],dpi:439.4,bw:4,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G900F/*"},{ua:"SM-G900F"}],dpi:[415.6,431.6],bw:5,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G900M/*"},{ua:"SM-G900M"}],dpi:[415.6,431.6],bw:5,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G800F/*"},{ua:"SM-G800F"}],dpi:326.8,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G906S/*"},{ua:"SM-G906S"}],dpi:[562.7,572.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/GT-I9300/*"},{ua:"GT-I9300"}],dpi:[306.7,304.8],bw:5,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-T535/*"},{ua:"SM-T535"}],dpi:[142.6,136.4],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-N920C/*"},{ua:"SM-N920C"}],dpi:[515.1,518.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-N920P/*"},{ua:"SM-N920P"}],dpi:[386.3655,390.144],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-N920W8/*"},{ua:"SM-N920W8"}],dpi:[515.1,518.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/GT-I9300I/*"},{ua:"GT-I9300I"}],dpi:[304.8,305.8],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/GT-I9195/*"},{ua:"GT-I9195"}],dpi:[249.4,256.7],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SPH-L520/*"},{ua:"SPH-L520"}],dpi:[249.4,255.9],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SAMSUNG-SGH-I717/*"},{ua:"SAMSUNG-SGH-I717"}],dpi:285.8,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SPH-D710/*"},{ua:"SPH-D710"}],dpi:[217.7,204.2],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/GT-N7100/*"},{ua:"GT-N7100"}],dpi:265.1,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SCH-I605/*"},{ua:"SCH-I605"}],dpi:265.1,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/Galaxy Nexus/*"},{ua:"Galaxy Nexus"}],dpi:[315.3,314.2],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-N910H/*"},{ua:"SM-N910H"}],dpi:[515.1,518],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-N910C/*"},{ua:"SM-N910C"}],dpi:[515.2,520.2],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G130M/*"},{ua:"SM-G130M"}],dpi:[165.9,164.8],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G928I/*"},{ua:"SM-G928I"}],dpi:[515.1,518.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G920F/*"},{ua:"SM-G920F"}],dpi:580.6,bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G920P/*"},{ua:"SM-G920P"}],dpi:[522.5,577],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G925F/*"},{ua:"SM-G925F"}],dpi:580.6,bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G925V/*"},{ua:"SM-G925V"}],dpi:[522.5,576.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G930F/*"},{ua:"SM-G930F"}],dpi:576.6,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G935F/*"},{ua:"SM-G935F"}],dpi:533,bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G950F/*"},{ua:"SM-G950F"}],dpi:[562.707,565.293],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G955U/*"},{ua:"SM-G955U"}],dpi:[522.514,525.762],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G955F/*"},{ua:"SM-G955F"}],dpi:[522.514,525.762],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G960F/*"},{ua:"SM-G960F"}],dpi:[569.575,571.5],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G9600/*"},{ua:"SM-G9600"}],dpi:[569.575,571.5],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G960T/*"},{ua:"SM-G960T"}],dpi:[569.575,571.5],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G960N/*"},{ua:"SM-G960N"}],dpi:[569.575,571.5],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G960U/*"},{ua:"SM-G960U"}],dpi:[569.575,571.5],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G9608/*"},{ua:"SM-G9608"}],dpi:[569.575,571.5],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G960FD/*"},{ua:"SM-G960FD"}],dpi:[569.575,571.5],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G960W/*"},{ua:"SM-G960W"}],dpi:[569.575,571.5],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G965F/*"},{ua:"SM-G965F"}],dpi:529,bw:2,ac:1e3},{type:"android",rules:[{mdmh:"Sony/*/C6903/*"},{ua:"C6903"}],dpi:[442.5,443.3],bw:3,ac:500},{type:"android",rules:[{mdmh:"Sony/*/D6653/*"},{ua:"D6653"}],dpi:[428.6,427.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Sony/*/E6653/*"},{ua:"E6653"}],dpi:[428.6,425.7],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Sony/*/E6853/*"},{ua:"E6853"}],dpi:[403.4,401.9],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Sony/*/SGP321/*"},{ua:"SGP321"}],dpi:[224.7,224.1],bw:3,ac:500},{type:"android",rules:[{mdmh:"TCT/*/ALCATEL ONE TOUCH Fierce/*"},{ua:"ALCATEL ONE TOUCH Fierce"}],dpi:[240,247.5],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"THL/*/thl 5000/*"},{ua:"thl 5000"}],dpi:[480,443.3],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Fly/*/IQ4412/*"},{ua:"IQ4412"}],dpi:307.9,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"ZTE/*/ZTE Blade L2/*"},{ua:"ZTE Blade L2"}],dpi:240,bw:3,ac:500},{type:"android",rules:[{mdmh:"BENEVE/*/VR518/*"},{ua:"VR518"}],dpi:480,bw:3,ac:500},{type:"ios",rules:[{res:[640,960]}],dpi:[325.1,328.4],bw:4,ac:1e3},{type:"ios",rules:[{res:[640,1136]}],dpi:[317.1,320.2],bw:3,ac:1e3},{type:"ios",rules:[{res:[750,1334]}],dpi:326.4,bw:4,ac:1e3},{type:"ios",rules:[{res:[1242,2208]}],dpi:[453.6,458.4],bw:4,ac:1e3},{type:"ios",rules:[{res:[1125,2001]}],dpi:[410.9,415.4],bw:4,ac:1e3},{type:"ios",rules:[{res:[1125,2436]}],dpi:458,bw:4,ac:1e3},{type:"android",rules:[{mdmh:"Huawei/*/EML-L29/*"},{ua:"EML-L29"}],dpi:428,bw:3.45,ac:500},{type:"android",rules:[{mdmh:"Nokia/*/Nokia 7.1/*"},{ua:"Nokia 7.1"}],dpi:[432,431.9],bw:3,ac:500},{type:"ios",rules:[{res:[1242,2688]}],dpi:458,bw:4,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G570M/*"},{ua:"SM-G570M"}],dpi:320,bw:3.684,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G970F/*"},{ua:"SM-G970F"}],dpi:438,bw:2.281,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G973F/*"},{ua:"SM-G973F"}],dpi:550,bw:2.002,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G975F/*"},{ua:"SM-G975F"}],dpi:522,bw:2.054,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G977F/*"},{ua:"SM-G977F"}],dpi:505,bw:2.334,ac:500},{type:"ios",rules:[{res:[828,1792]}],dpi:326,bw:5,ac:500}]};function be(e,t){if(this.dpdb=ye,this.recalculateDeviceParams_(),e){this.onDeviceParamsUpdated=t;var i=new XMLHttpRequest,r=this;i.open("GET",e,!0),i.addEventListener("load",(function(){r.loading=!1,i.status>=200&&i.status<=299?(r.dpdb=JSON.parse(i.response),r.recalculateDeviceParams_()):console.error("Error loading online DPDB!")})),i.send()}}function Ee(e){this.xdpi=e.xdpi,this.ydpi=e.ydpi,this.bevelMm=e.bevelMm}function xe(e,t){this.set(e,t)}function Me(e,t){this.kFilter=e,this.isDebug=t,this.currentAccelMeasurement=new xe,this.currentGyroMeasurement=new xe,this.previousGyroMeasurement=new xe,f()?this.filterQ=new Ae(-1,0,0,1):this.filterQ=new Ae(1,0,0,1),this.previousFilterQ=new Ae,this.previousFilterQ.copy(this.filterQ),this.accelQ=new Ae,this.isOrientationInitialized=!1,this.estimatedGravity=new ce,this.measuredGravity=new ce,this.gyroIntegralQ=new Ae}function Se(e,t){this.predictionTimeS=e,this.isDebug=t,this.previousQ=new Ae,this.previousTimestampS=null,this.deltaQ=new Ae,this.outQ=new Ae}function _e(e,t,i,r){this.yawOnly=i,this.accelerometer=new ce,this.gyroscope=new ce,this.filter=new Me(e,r),this.posePredictor=new Se(t,r),this.isFirefoxAndroid=v(),this.isIOS=f();var n=w();this.isDeviceMotionInRadians=!this.isIOS&&n&&n<66,this.isWithoutDeviceMotion=b()||y(),this.filterToWorldQ=new Ae,f()?this.filterToWorldQ.setFromAxisAngle(new ce(1,0,0),Math.PI/2):this.filterToWorldQ.setFromAxisAngle(new ce(1,0,0),-Math.PI/2),this.inverseWorldToScreenQ=new Ae,this.worldToScreenQ=new Ae,this.originalPoseAdjustQ=new Ae,this.originalPoseAdjustQ.setFromAxisAngle(new ce(0,0,1),-window.orientation*Math.PI/180),this.setScreenTransform_(),x()&&this.filterToWorldQ.multiply(this.inverseWorldToScreenQ),this.resetQ=new Ae,this.orientationOut_=new Float32Array(4),this.start()}be.prototype.getDeviceParams=function(){return this.deviceParams},be.prototype.recalculateDeviceParams_=function(){var e=this.calcDeviceParams_();e?(this.deviceParams=e,this.onDeviceParamsUpdated&&this.onDeviceParamsUpdated(this.deviceParams)):console.error("Failed to recalculate device parameters.")},be.prototype.calcDeviceParams_=function(){var e=this.dpdb;if(!e)return console.error("DPDB not available."),null;if(1!=e.format)return console.error("DPDB has unexpected format version."),null;if(!e.devices||!e.devices.length)return console.error("DPDB does not have a devices section."),null;var t=navigator.userAgent||navigator.vendor||window.opera,i=S(),r=_();if(!e.devices)return console.error("DPDB has no devices section."),null;for(var n=0;n<e.devices.length;n++){var s=e.devices[n];if(s.rules)if("ios"==s.type||"android"==s.type){if(f()==("ios"==s.type)){for(var a=!1,o=0;o<s.rules.length;o++){var l=s.rules[o];if(this.ruleMatches_(l,t,i,r)){a=!0;break}}if(a)return new Ee({xdpi:s.dpi[0]||s.dpi,ydpi:s.dpi[1]||s.dpi,bevelMm:s.bw})}}else console.warn("Device["+n+"] has invalid type.");else console.warn("Device["+n+"] has no rules section.")}return console.warn("No DPDB device match."),null},be.prototype.ruleMatches_=function(e,t,i,r){if(!e.ua&&!e.res)return!1;if(e.ua&&"SM"===e.ua.substring(0,2)&&(e.ua=e.ua.substring(0,7)),e.ua&&t.indexOf(e.ua)<0)return!1;if(e.res){if(!e.res[0]||!e.res[1])return!1;var n=e.res[0],s=e.res[1];if(Math.min(i,r)!=Math.min(n,s)||Math.max(i,r)!=Math.max(n,s))return!1}return!0},xe.prototype.set=function(e,t){this.sample=e,this.timestampS=t},xe.prototype.copy=function(e){this.set(e.sample,e.timestampS)},Me.prototype.addAccelMeasurement=function(e,t){this.currentAccelMeasurement.set(e,t)},Me.prototype.addGyroMeasurement=function(e,t){this.currentGyroMeasurement.set(e,t);var i=t-this.previousGyroMeasurement.timestampS;M(i)&&this.run_(),this.previousGyroMeasurement.copy(this.currentGyroMeasurement)},Me.prototype.run_=function(){if(!this.isOrientationInitialized)return this.accelQ=this.accelToQuaternion_(this.currentAccelMeasurement.sample),this.previousFilterQ.copy(this.accelQ),void(this.isOrientationInitialized=!0);var e=this.currentGyroMeasurement.timestampS-this.previousGyroMeasurement.timestampS,t=this.gyroToQuaternionDelta_(this.currentGyroMeasurement.sample,e);this.gyroIntegralQ.multiply(t),this.filterQ.copy(this.previousFilterQ),this.filterQ.multiply(t);var i=new Ae;i.copy(this.filterQ),i.inverse(),this.estimatedGravity.set(0,0,-1),this.estimatedGravity.applyQuaternion(i),this.estimatedGravity.normalize(),this.measuredGravity.copy(this.currentAccelMeasurement.sample),this.measuredGravity.normalize();var r=new Ae;r.setFromUnitVectors(this.estimatedGravity,this.measuredGravity),r.inverse(),this.isDebug&&console.log("Delta: %d deg, G_est: (%s, %s, %s), G_meas: (%s, %s, %s)",le*V(r),this.estimatedGravity.x.toFixed(1),this.estimatedGravity.y.toFixed(1),this.estimatedGravity.z.toFixed(1),this.measuredGravity.x.toFixed(1),this.measuredGravity.y.toFixed(1),this.measuredGravity.z.toFixed(1));var n=new Ae;n.copy(this.filterQ),n.multiply(r),this.filterQ.slerp(n,1-this.kFilter),this.previousFilterQ.copy(this.filterQ)},Me.prototype.getOrientation=function(){return this.filterQ},Me.prototype.accelToQuaternion_=function(e){var t=new ce;t.copy(e),t.normalize();var i=new Ae;return i.setFromUnitVectors(new ce(0,0,-1),t),i.inverse(),i},Me.prototype.gyroToQuaternionDelta_=function(e,t){var i=new Ae,r=new ce;return r.copy(e),r.normalize(),i.setFromAxisAngle(r,e.length()*t),i},Se.prototype.getPrediction=function(e,t,i){if(!this.previousTimestampS)return this.previousQ.copy(e),this.previousTimestampS=i,e;var r=new ce;r.copy(t),r.normalize();var n=t.length();if(n<20*oe)return this.isDebug&&console.log("Moving slowly, at %s deg/s: no prediction",(le*n).toFixed(1)),this.outQ.copy(e),this.previousQ.copy(e),this.outQ;var s=n*this.predictionTimeS;return this.deltaQ.setFromAxisAngle(r,s),this.outQ.copy(this.previousQ),this.outQ.multiply(this.deltaQ),this.previousQ.copy(e),this.previousTimestampS=i,this.outQ},_e.prototype.getPosition=function(){return null},_e.prototype.getOrientation=function(){var e=void 0;if(this.isWithoutDeviceMotion&&this._deviceOrientationQ)return this.deviceOrientationFixQ=this.deviceOrientationFixQ||(i=(new Ae).setFromAxisAngle(new ce(0,0,-1),0),r=new Ae,-90===window.orientation?r.setFromAxisAngle(new ce(0,1,0),Math.PI/-2):r.setFromAxisAngle(new ce(0,1,0),Math.PI/2),i.multiply(r)),this.deviceOrientationFilterToWorldQ=this.deviceOrientationFilterToWorldQ||((t=new Ae).setFromAxisAngle(new ce(1,0,0),-Math.PI/2),t),e=this._deviceOrientationQ,(n=new Ae).copy(e),n.multiply(this.deviceOrientationFilterToWorldQ),n.multiply(this.resetQ),n.multiply(this.worldToScreenQ),n.multiplyQuaternions(this.deviceOrientationFixQ,n),this.yawOnly&&(n.x=0,n.z=0,n.normalize()),this.orientationOut_[0]=n.x,this.orientationOut_[1]=n.y,this.orientationOut_[2]=n.z,this.orientationOut_[3]=n.w,this.orientationOut_;var t,i,r,n,s=this.filter.getOrientation();return e=this.posePredictor.getPrediction(s,this.gyroscope,this.previousTimestampS),(n=new Ae).copy(this.filterToWorldQ),n.multiply(this.resetQ),n.multiply(e),n.multiply(this.worldToScreenQ),this.yawOnly&&(n.x=0,n.z=0,n.normalize()),this.orientationOut_[0]=n.x,this.orientationOut_[1]=n.y,this.orientationOut_[2]=n.z,this.orientationOut_[3]=n.w,this.orientationOut_},_e.prototype.resetPose=function(){this.resetQ.copy(this.filter.getOrientation()),this.resetQ.x=0,this.resetQ.y=0,this.resetQ.z*=-1,this.resetQ.normalize(),x()&&this.resetQ.multiply(this.inverseWorldToScreenQ),this.resetQ.multiply(this.originalPoseAdjustQ)},_e.prototype.onDeviceOrientation_=function(e){this._deviceOrientationQ=this._deviceOrientationQ||new Ae;var t=e.alpha,i=e.beta,r=e.gamma;t=(t||0)*Math.PI/180,i=(i||0)*Math.PI/180,r=(r||0)*Math.PI/180,this._deviceOrientationQ.setFromEulerYXZ(i,t,-r)},_e.prototype.onDeviceMotion_=function(e){this.updateDeviceMotion_(e)},_e.prototype.updateDeviceMotion_=function(e){var t=e.accelerationIncludingGravity,i=e.rotationRate,r=e.timeStamp/1e3,n=r-this.previousTimestampS;return n<0?(k("fusion-pose-sensor:invalid:non-monotonic","Invalid timestamps detected: non-monotonic timestamp from devicemotion"),void(this.previousTimestampS=r)):n<=u||n>d?(k("fusion-pose-sensor:invalid:outside-threshold","Invalid timestamps detected: Timestamp from devicemotion outside expected range."),void(this.previousTimestampS=r)):(this.accelerometer.set(-t.x,-t.y,-t.z),i&&(E()?this.gyroscope.set(-i.beta,i.alpha,i.gamma):this.gyroscope.set(i.alpha,i.beta,i.gamma),this.isDeviceMotionInRadians||this.gyroscope.multiplyScalar(Math.PI/180),this.filter.addGyroMeasurement(this.gyroscope,r)),this.filter.addAccelMeasurement(this.accelerometer,r),void(this.previousTimestampS=r))},_e.prototype.onOrientationChange_=function(e){this.setScreenTransform_()},_e.prototype.onMessage_=function(e){var t=e.data;t&&t.type&&"devicemotion"===t.type.toLowerCase()&&this.updateDeviceMotion_(t.deviceMotionEvent)},_e.prototype.setScreenTransform_=function(){switch(this.worldToScreenQ.set(0,0,0,1),window.orientation){case 0:break;case 90:this.worldToScreenQ.setFromAxisAngle(new ce(0,0,1),-Math.PI/2);break;case-90:this.worldToScreenQ.setFromAxisAngle(new ce(0,0,1),Math.PI/2)}this.inverseWorldToScreenQ.copy(this.worldToScreenQ),this.inverseWorldToScreenQ.inverse()},_e.prototype.start=function(){this.onDeviceMotionCallback_=this.onDeviceMotion_.bind(this),this.onOrientationChangeCallback_=this.onOrientationChange_.bind(this),this.onMessageCallback_=this.onMessage_.bind(this),this.onDeviceOrientationCallback_=this.onDeviceOrientation_.bind(this),f()&&N()&&window.addEventListener("message",this.onMessageCallback_),window.addEventListener("orientationchange",this.onOrientationChangeCallback_),this.isWithoutDeviceMotion?window.addEventListener("deviceorientation",this.onDeviceOrientationCallback_):window.addEventListener("devicemotion",this.onDeviceMotionCallback_)},_e.prototype.stop=function(){window.removeEventListener("devicemotion",this.onDeviceMotionCallback_),window.removeEventListener("deviceorientation",this.onDeviceOrientationCallback_),window.removeEventListener("orientationchange",this.onOrientationChangeCallback_),window.removeEventListener("message",this.onMessageCallback_)};var Re=60,Fe=new ce(1,0,0),Pe=new ce(0,0,1),Ce=new Ae;Ce.setFromAxisAngle(Fe,-Math.PI/2),Ce.multiply((new Ae).setFromAxisAngle(Pe,Math.PI/2));var Be=function(){function e(t){l(this,e),this.config=t,this.sensor=null,this.fusionSensor=null,this._out=new Float32Array(4),this.api=null,this.errors=[],this._sensorQ=new Ae,this._outQ=new Ae,this._onSensorRead=this._onSensorRead.bind(this),this._onSensorError=this._onSensorError.bind(this),this.init()}return c(e,[{key:"init",value:function(){var e=null;try{(e=new RelativeOrientationSensor({frequency:Re,referenceFrame:"screen"})).addEventListener("error",this._onSensorError)}catch(e){this.errors.push(e),"SecurityError"===e.name?(console.error("Cannot construct sensors due to the Feature Policy"),console.warn('Attempting to fall back using "devicemotion"; however this will fail in the future without correct permissions.'),this.useDeviceMotion()):"ReferenceError"===e.name?this.useDeviceMotion():console.error(e)}e&&(this.api="sensor",this.sensor=e,this.sensor.addEventListener("reading",this._onSensorRead),this.sensor.start())}},{key:"useDeviceMotion",value:function(){this.api="devicemotion",this.fusionSensor=new _e(this.config.K_FILTER,this.config.PREDICTION_TIME_S,this.config.YAW_ONLY,this.config.DEBUG),this.sensor&&(this.sensor.removeEventListener("reading",this._onSensorRead),this.sensor.removeEventListener("error",this._onSensorError),this.sensor=null)}},{key:"getOrientation",value:function(){if(this.fusionSensor)return this.fusionSensor.getOrientation();if(!this.sensor||!this.sensor.quaternion)return this._out[0]=this._out[1]=this._out[2]=0,this._out[3]=1,this._out;var e=this.sensor.quaternion;this._sensorQ.set(e[0],e[1],e[2],e[3]);var t=this._outQ;return t.copy(Ce),t.multiply(this._sensorQ),this.config.YAW_ONLY&&(t.x=t.z=0,t.normalize()),this._out[0]=t.x,this._out[1]=t.y,this._out[2]=t.z,this._out[3]=t.w,this._out}},{key:"_onSensorError",value:function(e){this.errors.push(e.error),"NotAllowedError"===e.error.name?console.error("Permission to access sensor was denied"):"NotReadableError"===e.error.name?console.error("Sensor could not be read"):console.error(e.error),this.useDeviceMotion()}},{key:"_onSensorRead",value:function(){}}]),e}(),De="<svg width='198' height='240' viewBox='0 0 198 240' xmlns='http://www.w3.org/2000/svg'><g fill='none' fill-rule='evenodd'><path d='M149.625 109.527l6.737 3.891v.886c0 .177.013.36.038.549.01.081.02.162.027.242.14 1.415.974 2.998 2.105 3.999l5.72 5.062.081-.09s4.382-2.53 5.235-3.024l25.97 14.993v54.001c0 .771-.386 1.217-.948 1.217-.233 0-.495-.076-.772-.236l-23.967-13.838-.014.024-27.322 15.775-.85-1.323c-4.731-1.529-9.748-2.74-14.951-3.61a.27.27 0 0 0-.007.024l-5.067 16.961-7.891 4.556-.037-.063v27.59c0 .772-.386 1.217-.948 1.217-.232 0-.495-.076-.772-.236l-42.473-24.522c-.95-.549-1.72-1.877-1.72-2.967v-1.035l-.021.047a5.111 5.111 0 0 0-1.816-.399 5.682 5.682 0 0 0-.546.001 13.724 13.724 0 0 1-1.918-.041c-1.655-.153-3.2-.6-4.404-1.296l-46.576-26.89.005.012-10.278-18.75c-1.001-1.827-.241-4.216 1.698-5.336l56.011-32.345a4.194 4.194 0 0 1 2.099-.572c1.326 0 2.572.659 3.227 1.853l.005-.003.227.413-.006.004a9.63 9.63 0 0 0 1.477 2.018l.277.27c1.914 1.85 4.468 2.801 7.113 2.801 1.949 0 3.948-.517 5.775-1.572.013 0 7.319-4.219 7.319-4.219a4.194 4.194 0 0 1 2.099-.572c1.326 0 2.572.658 3.226 1.853l3.25 5.928.022-.018 6.785 3.917-.105-.182 46.881-26.965m0-1.635c-.282 0-.563.073-.815.218l-46.169 26.556-5.41-3.124-3.005-5.481c-.913-1.667-2.699-2.702-4.66-2.703-1.011 0-2.02.274-2.917.792a3825 3825 0 0 1-7.275 4.195l-.044.024a9.937 9.937 0 0 1-4.957 1.353c-2.292 0-4.414-.832-5.976-2.342l-.252-.245a7.992 7.992 0 0 1-1.139-1.534 1.379 1.379 0 0 0-.06-.122l-.227-.414a1.718 1.718 0 0 0-.095-.154c-.938-1.574-2.673-2.545-4.571-2.545-1.011 0-2.02.274-2.917.792L3.125 155.502c-2.699 1.559-3.738 4.94-2.314 7.538l10.278 18.75c.177.323.448.563.761.704l46.426 26.804c1.403.81 3.157 1.332 5.072 1.508a15.661 15.661 0 0 0 2.146.046 4.766 4.766 0 0 1 .396 0c.096.004.19.011.283.022.109 1.593 1.159 3.323 2.529 4.114l42.472 24.522c.524.302 1.058.455 1.59.455 1.497 0 2.583-1.2 2.583-2.852v-26.562l7.111-4.105a1.64 1.64 0 0 0 .749-.948l4.658-15.593c4.414.797 8.692 1.848 12.742 3.128l.533.829a1.634 1.634 0 0 0 2.193.531l26.532-15.317L193 192.433c.523.302 1.058.455 1.59.455 1.497 0 2.583-1.199 2.583-2.852v-54.001c0-.584-.312-1.124-.818-1.416l-25.97-14.993a1.633 1.633 0 0 0-1.636.001c-.606.351-2.993 1.73-4.325 2.498l-4.809-4.255c-.819-.725-1.461-1.933-1.561-2.936a7.776 7.776 0 0 0-.033-.294 2.487 2.487 0 0 1-.023-.336v-.886c0-.584-.312-1.123-.817-1.416l-6.739-3.891a1.633 1.633 0 0 0-.817-.219' fill='#455A64'/><path d='M96.027 132.636l46.576 26.891c1.204.695 1.979 1.587 2.242 2.541l-.01.007-81.374 46.982h-.001c-1.654-.152-3.199-.6-4.403-1.295l-46.576-26.891 83.546-48.235' fill='#FAFAFA'/><path d='M63.461 209.174c-.008 0-.015 0-.022-.002-1.693-.156-3.228-.609-4.441-1.309l-46.576-26.89a.118.118 0 0 1 0-.203l83.546-48.235a.117.117 0 0 1 .117 0l46.576 26.891c1.227.708 2.021 1.612 2.296 2.611a.116.116 0 0 1-.042.124l-.021.016-81.375 46.981a.11.11 0 0 1-.058.016zm-50.747-28.303l46.401 26.79c1.178.68 2.671 1.121 4.32 1.276l81.272-46.922c-.279-.907-1.025-1.73-2.163-2.387l-46.517-26.857-83.313 48.1z' fill='#607D8B'/><path d='M148.327 165.471a5.85 5.85 0 0 1-.546.001c-1.894-.083-3.302-1.038-3.145-2.132a2.693 2.693 0 0 0-.072-1.105l-81.103 46.822c.628.058 1.272.073 1.918.042.182-.009.364-.009.546-.001 1.894.083 3.302 1.038 3.145 2.132l79.257-45.759' fill='#FFF'/><path d='M69.07 211.347a.118.118 0 0 1-.115-.134c.045-.317-.057-.637-.297-.925-.505-.61-1.555-1.022-2.738-1.074a5.966 5.966 0 0 0-.535.001 14.03 14.03 0 0 1-1.935-.041.117.117 0 0 1-.103-.092.116.116 0 0 1 .055-.126l81.104-46.822a.117.117 0 0 1 .171.07c.104.381.129.768.074 1.153-.045.316.057.637.296.925.506.61 1.555 1.021 2.739 1.073.178.008.357.008.535-.001a.117.117 0 0 1 .064.218l-79.256 45.759a.114.114 0 0 1-.059.016zm-3.405-2.372c.089 0 .177.002.265.006 1.266.056 2.353.488 2.908 1.158.227.274.35.575.36.882l78.685-45.429c-.036 0-.072-.001-.107-.003-1.267-.056-2.354-.489-2.909-1.158-.282-.34-.402-.724-.347-1.107a2.604 2.604 0 0 0-.032-.91L63.846 208.97a13.91 13.91 0 0 0 1.528.012c.097-.005.194-.007.291-.007z' fill='#607D8B'/><path d='M2.208 162.134c-1.001-1.827-.241-4.217 1.698-5.337l56.011-32.344c1.939-1.12 4.324-.546 5.326 1.281l.232.41a9.344 9.344 0 0 0 1.47 2.021l.278.27c3.325 3.214 8.583 3.716 12.888 1.23l7.319-4.22c1.94-1.119 4.324-.546 5.325 1.282l3.25 5.928-83.519 48.229-10.278-18.75z' fill='#FAFAFA'/><path d='M12.486 181.001a.112.112 0 0 1-.031-.005.114.114 0 0 1-.071-.056L2.106 162.19c-1.031-1.88-.249-4.345 1.742-5.494l56.01-32.344a4.328 4.328 0 0 1 2.158-.588c1.415 0 2.65.702 3.311 1.882.01.008.018.017.024.028l.227.414a.122.122 0 0 1 .013.038 9.508 9.508 0 0 0 1.439 1.959l.275.266c1.846 1.786 4.344 2.769 7.031 2.769 1.977 0 3.954-.538 5.717-1.557a.148.148 0 0 1 .035-.013l7.284-4.206a4.321 4.321 0 0 1 2.157-.588c1.427 0 2.672.716 3.329 1.914l3.249 5.929a.116.116 0 0 1-.044.157l-83.518 48.229a.116.116 0 0 1-.059.016zm49.53-57.004c-.704 0-1.41.193-2.041.557l-56.01 32.345c-1.882 1.086-2.624 3.409-1.655 5.179l10.221 18.645 83.317-48.112-3.195-5.829c-.615-1.122-1.783-1.792-3.124-1.792a4.08 4.08 0 0 0-2.04.557l-7.317 4.225a.148.148 0 0 1-.035.013 11.7 11.7 0 0 1-5.801 1.569c-2.748 0-5.303-1.007-7.194-2.835l-.278-.27a9.716 9.716 0 0 1-1.497-2.046.096.096 0 0 1-.013-.037l-.191-.347a.11.11 0 0 1-.023-.029c-.615-1.123-1.783-1.793-3.124-1.793z' fill='#607D8B'/><path d='M42.434 155.808c-2.51-.001-4.697-1.258-5.852-3.365-1.811-3.304-.438-7.634 3.059-9.654l12.291-7.098a7.599 7.599 0 0 1 3.789-1.033c2.51 0 4.697 1.258 5.852 3.365 1.811 3.304.439 7.634-3.059 9.654l-12.291 7.098a7.606 7.606 0 0 1-3.789 1.033zm13.287-20.683a7.128 7.128 0 0 0-3.555.971l-12.291 7.098c-3.279 1.893-4.573 5.942-2.883 9.024 1.071 1.955 3.106 3.122 5.442 3.122a7.13 7.13 0 0 0 3.556-.97l12.291-7.098c3.279-1.893 4.572-5.942 2.883-9.024-1.072-1.955-3.106-3.123-5.443-3.123z' fill='#607D8B'/><path d='M149.588 109.407l6.737 3.89v.887c0 .176.013.36.037.549.011.081.02.161.028.242.14 1.415.973 2.998 2.105 3.999l7.396 6.545c.177.156.358.295.541.415 1.579 1.04 2.95.466 3.062-1.282.049-.784.057-1.595.023-2.429l-.003-.16v-1.151l25.987 15.003v54c0 1.09-.77 1.53-1.72.982l-42.473-24.523c-.95-.548-1.72-1.877-1.72-2.966v-34.033' fill='#FAFAFA'/><path d='M194.553 191.25c-.257 0-.54-.085-.831-.253l-42.472-24.521c-.981-.567-1.779-1.943-1.779-3.068v-34.033h.234v34.033c0 1.051.745 2.336 1.661 2.866l42.473 24.521c.424.245.816.288 1.103.122.285-.164.442-.52.442-1.002v-53.933l-25.753-14.868.003 1.106c.034.832.026 1.654-.024 2.439-.054.844-.396 1.464-.963 1.746-.619.309-1.45.173-2.28-.373a5.023 5.023 0 0 1-.553-.426l-7.397-6.544c-1.158-1.026-1.999-2.625-2.143-4.076a9.624 9.624 0 0 0-.027-.238 4.241 4.241 0 0 1-.038-.564v-.82l-6.68-3.856.117-.202 6.738 3.89.058.034v.954c0 .171.012.351.036.533.011.083.021.165.029.246.138 1.395.948 2.935 2.065 3.923l7.397 6.545c.173.153.35.289.527.406.758.499 1.504.63 2.047.359.49-.243.786-.795.834-1.551.05-.778.057-1.591.024-2.417l-.004-.163v-1.355l.175.1 25.987 15.004.059.033v54.068c0 .569-.198.996-.559 1.204a1.002 1.002 0 0 1-.506.131' fill='#607D8B'/><path d='M145.685 163.161l24.115 13.922-25.978 14.998-1.462-.307c-6.534-2.17-13.628-3.728-21.019-4.616-4.365-.524-8.663 1.096-9.598 3.62a2.746 2.746 0 0 0-.011 1.928c1.538 4.267 4.236 8.363 7.995 12.135l.532.845-25.977 14.997-24.115-13.922 75.518-43.6' fill='#FFF'/><path d='M94.282 220.818l-.059-.033-24.29-14.024.175-.101 75.577-43.634.058.033 24.29 14.024-26.191 15.122-.045-.01-1.461-.307c-6.549-2.174-13.613-3.725-21.009-4.614a13.744 13.744 0 0 0-1.638-.097c-3.758 0-7.054 1.531-7.837 3.642a2.62 2.62 0 0 0-.01 1.848c1.535 4.258 4.216 8.326 7.968 12.091l.016.021.526.835.006.01.064.102-.105.061-25.977 14.998-.058.033zm-23.881-14.057l23.881 13.788 24.802-14.32c.546-.315.846-.489 1.017-.575l-.466-.74c-3.771-3.787-6.467-7.881-8.013-12.168a2.851 2.851 0 0 1 .011-2.008c.815-2.199 4.203-3.795 8.056-3.795.557 0 1.117.033 1.666.099 7.412.891 14.491 2.445 21.041 4.621.836.175 1.215.254 1.39.304l25.78-14.884-23.881-13.788-75.284 43.466z' fill='#607D8B'/><path d='M167.23 125.979v50.871l-27.321 15.773-6.461-14.167c-.91-1.996-3.428-1.738-5.624.574a10.238 10.238 0 0 0-2.33 4.018l-6.46 21.628-27.322 15.774v-50.871l75.518-43.6' fill='#FFF'/><path d='M91.712 220.567a.127.127 0 0 1-.059-.016.118.118 0 0 1-.058-.101v-50.871c0-.042.023-.08.058-.101l75.519-43.6a.117.117 0 0 1 .175.101v50.871c0 .041-.023.08-.059.1l-27.321 15.775a.118.118 0 0 1-.094.01.12.12 0 0 1-.071-.063l-6.46-14.168c-.375-.822-1.062-1.275-1.934-1.275-1.089 0-2.364.686-3.5 1.881a10.206 10.206 0 0 0-2.302 3.972l-6.46 21.627a.118.118 0 0 1-.054.068L91.77 220.551a.12.12 0 0 1-.058.016zm.117-50.92v50.601l27.106-15.65 6.447-21.583a10.286 10.286 0 0 1 2.357-4.065c1.18-1.242 2.517-1.954 3.669-1.954.969 0 1.731.501 2.146 1.411l6.407 14.051 27.152-15.676v-50.601l-75.284 43.466z' fill='#607D8B'/><path d='M168.543 126.213v50.87l-27.322 15.774-6.46-14.168c-.91-1.995-3.428-1.738-5.624.574a10.248 10.248 0 0 0-2.33 4.019l-6.461 21.627-27.321 15.774v-50.87l75.518-43.6' fill='#FFF'/><path d='M93.025 220.8a.123.123 0 0 1-.059-.015.12.12 0 0 1-.058-.101v-50.871c0-.042.023-.08.058-.101l75.518-43.6a.112.112 0 0 1 .117 0c.036.02.059.059.059.1v50.871a.116.116 0 0 1-.059.101l-27.321 15.774a.111.111 0 0 1-.094.01.115.115 0 0 1-.071-.062l-6.46-14.168c-.375-.823-1.062-1.275-1.935-1.275-1.088 0-2.363.685-3.499 1.881a10.19 10.19 0 0 0-2.302 3.971l-6.461 21.628a.108.108 0 0 1-.053.067l-27.322 15.775a.12.12 0 0 1-.058.015zm.117-50.919v50.6l27.106-15.649 6.447-21.584a10.293 10.293 0 0 1 2.357-4.065c1.179-1.241 2.516-1.954 3.668-1.954.969 0 1.732.502 2.147 1.412l6.407 14.051 27.152-15.676v-50.601l-75.284 43.466z' fill='#607D8B'/><path d='M169.8 177.083l-27.322 15.774-6.46-14.168c-.91-1.995-3.428-1.738-5.625.574a10.246 10.246 0 0 0-2.329 4.019l-6.461 21.627-27.321 15.774v-50.87l75.518-43.6v50.87z' fill='#FAFAFA'/><path d='M94.282 220.917a.234.234 0 0 1-.234-.233v-50.871c0-.083.045-.161.117-.202l75.518-43.601a.234.234 0 1 1 .35.202v50.871a.233.233 0 0 1-.116.202l-27.322 15.775a.232.232 0 0 1-.329-.106l-6.461-14.168c-.36-.789-.992-1.206-1.828-1.206-1.056 0-2.301.672-3.415 1.844a10.099 10.099 0 0 0-2.275 3.924l-6.46 21.628a.235.235 0 0 1-.107.136l-27.322 15.774a.23.23 0 0 1-.116.031zm.233-50.969v50.331l26.891-15.525 6.434-21.539a10.41 10.41 0 0 1 2.384-4.112c1.201-1.265 2.569-1.991 3.753-1.991 1.018 0 1.818.526 2.253 1.48l6.354 13.934 26.982-15.578v-50.331l-75.051 43.331z' fill='#607D8B'/><path d='M109.894 199.943c-1.774 0-3.241-.725-4.244-2.12a.224.224 0 0 1 .023-.294.233.233 0 0 1 .301-.023c.78.547 1.705.827 2.75.827 1.323 0 2.754-.439 4.256-1.306 5.311-3.067 9.631-10.518 9.631-16.611 0-1.927-.442-3.56-1.278-4.724a.232.232 0 0 1 .323-.327c1.671 1.172 2.591 3.381 2.591 6.219 0 6.242-4.426 13.863-9.865 17.003-1.574.908-3.084 1.356-4.488 1.356zm-2.969-1.542c.813.651 1.82.877 2.968.877h.001c1.321 0 2.753-.327 4.254-1.194 5.311-3.067 9.632-10.463 9.632-16.556 0-1.979-.463-3.599-1.326-4.761.411 1.035.625 2.275.625 3.635 0 6.243-4.426 13.883-9.865 17.023-1.574.909-3.084 1.317-4.49 1.317-.641 0-1.243-.149-1.799-.341z' fill='#607D8B'/><path d='M113.097 197.23c5.384-3.108 9.748-10.636 9.748-16.814 0-2.051-.483-3.692-1.323-4.86-1.784-1.252-4.374-1.194-7.257.47-5.384 3.108-9.748 10.636-9.748 16.814 0 2.051.483 3.692 1.323 4.86 1.784 1.252 4.374 1.194 7.257-.47' fill='#FAFAFA'/><path d='M108.724 198.614c-1.142 0-2.158-.213-3.019-.817-.021-.014-.04.014-.055-.007-.894-1.244-1.367-2.948-1.367-4.973 0-6.242 4.426-13.864 9.865-17.005 1.574-.908 3.084-1.363 4.49-1.363 1.142 0 2.158.309 3.018.913a.23.23 0 0 1 .056.056c.894 1.244 1.367 2.972 1.367 4.997 0 6.243-4.426 13.783-9.865 16.923-1.574.909-3.084 1.276-4.49 1.276zm-2.718-1.109c.774.532 1.688.776 2.718.776 1.323 0 2.754-.413 4.256-1.28 5.311-3.066 9.631-10.505 9.631-16.598 0-1.909-.434-3.523-1.255-4.685-.774-.533-1.688-.799-2.718-.799-1.323 0-2.755.441-4.256 1.308-5.311 3.066-9.631 10.506-9.631 16.599 0 1.909.434 3.517 1.255 4.679z' fill='#607D8B'/><path d='M149.318 114.262l-9.984 8.878 15.893 11.031 5.589-6.112-11.498-13.797' fill='#FAFAFA'/><path d='M169.676 120.84l-9.748 5.627c-3.642 2.103-9.528 2.113-13.147.024-3.62-2.089-3.601-5.488.041-7.591l9.495-5.608-6.729-3.885-81.836 47.071 45.923 26.514 3.081-1.779c.631-.365.869-.898.618-1.39-2.357-4.632-2.593-9.546-.683-14.262 5.638-13.92 24.509-24.815 48.618-28.07 8.169-1.103 16.68-.967 24.704.394.852.145 1.776.008 2.407-.357l3.081-1.778-25.825-14.91' fill='#FAFAFA'/><path d='M113.675 183.459a.47.47 0 0 1-.233-.062l-45.924-26.515a.468.468 0 0 1 .001-.809l81.836-47.071a.467.467 0 0 1 .466 0l6.729 3.885a.467.467 0 0 1-.467.809l-6.496-3.75-80.9 46.533 44.988 25.973 2.848-1.644c.192-.111.62-.409.435-.773-2.416-4.748-2.658-9.814-.7-14.65 2.806-6.927 8.885-13.242 17.582-18.263 8.657-4.998 19.518-8.489 31.407-10.094 8.198-1.107 16.79-.97 24.844.397.739.125 1.561.007 2.095-.301l2.381-1.374-25.125-14.506a.467.467 0 0 1 .467-.809l25.825 14.91a.467.467 0 0 1 0 .809l-3.081 1.779c-.721.417-1.763.575-2.718.413-7.963-1.351-16.457-1.486-24.563-.392-11.77 1.589-22.512 5.039-31.065 9.977-8.514 4.916-14.456 11.073-17.183 17.805-1.854 4.578-1.623 9.376.666 13.875.37.725.055 1.513-.8 2.006l-3.081 1.78a.476.476 0 0 1-.234.062' fill='#455A64'/><path d='M153.316 128.279c-2.413 0-4.821-.528-6.652-1.586-1.818-1.049-2.82-2.461-2.82-3.975 0-1.527 1.016-2.955 2.861-4.02l9.493-5.607a.233.233 0 1 1 .238.402l-9.496 5.609c-1.696.979-2.628 2.263-2.628 3.616 0 1.34.918 2.608 2.585 3.571 3.549 2.049 9.343 2.038 12.914-.024l9.748-5.628a.234.234 0 0 1 .234.405l-9.748 5.628c-1.858 1.072-4.296 1.609-6.729 1.609' fill='#607D8B'/><path d='M113.675 182.992l-45.913-26.508M113.675 183.342a.346.346 0 0 1-.175-.047l-45.913-26.508a.35.35 0 1 1 .35-.607l45.913 26.508a.35.35 0 0 1-.175.654' fill='#455A64'/><path d='M67.762 156.484v54.001c0 1.09.77 2.418 1.72 2.967l42.473 24.521c.95.549 1.72.11 1.72-.98v-54.001' fill='#FAFAFA'/><path d='M112.727 238.561c-.297 0-.62-.095-.947-.285l-42.473-24.521c-1.063-.613-1.895-2.05-1.895-3.27v-54.001a.35.35 0 1 1 .701 0v54.001c0 .96.707 2.18 1.544 2.663l42.473 24.522c.344.198.661.243.87.122.206-.119.325-.411.325-.799v-54.001a.35.35 0 1 1 .7 0v54.001c0 .655-.239 1.154-.675 1.406a1.235 1.235 0 0 1-.623.162' fill='#455A64'/><path d='M112.86 147.512h-.001c-2.318 0-4.499-.522-6.142-1.471-1.705-.984-2.643-2.315-2.643-3.749 0-1.445.952-2.791 2.68-3.788l12.041-6.953c1.668-.962 3.874-1.493 6.212-1.493 2.318 0 4.499.523 6.143 1.472 1.704.984 2.643 2.315 2.643 3.748 0 1.446-.952 2.791-2.68 3.789l-12.042 6.952c-1.668.963-3.874 1.493-6.211 1.493zm12.147-16.753c-2.217 0-4.298.497-5.861 1.399l-12.042 6.952c-1.502.868-2.33 1.998-2.33 3.182 0 1.173.815 2.289 2.293 3.142 1.538.889 3.596 1.378 5.792 1.378h.001c2.216 0 4.298-.497 5.861-1.399l12.041-6.953c1.502-.867 2.33-1.997 2.33-3.182 0-1.172-.814-2.288-2.292-3.142-1.539-.888-3.596-1.377-5.793-1.377z' fill='#607D8B'/><path d='M165.63 123.219l-5.734 3.311c-3.167 1.828-8.286 1.837-11.433.02-3.147-1.817-3.131-4.772.036-6.601l5.734-3.31 11.397 6.58' fill='#FAFAFA'/><path d='M154.233 117.448l9.995 5.771-4.682 2.704c-1.434.827-3.352 1.283-5.399 1.283-2.029 0-3.923-.449-5.333-1.263-1.29-.744-2-1.694-2-2.674 0-.991.723-1.955 2.036-2.713l5.383-3.108m0-.809l-5.734 3.31c-3.167 1.829-3.183 4.784-.036 6.601 1.568.905 3.623 1.357 5.684 1.357 2.077 0 4.159-.46 5.749-1.377l5.734-3.311-11.397-6.58M145.445 179.667c-1.773 0-3.241-.85-4.243-2.245-.067-.092-.057-.275.023-.356.08-.081.207-.12.3-.055.781.548 1.706.812 2.751.811 1.322 0 2.754-.446 4.256-1.313 5.31-3.066 9.631-10.522 9.631-16.615 0-1.927-.442-3.562-1.279-4.726a.235.235 0 0 1 .024-.301.232.232 0 0 1 .3-.027c1.67 1.172 2.59 3.38 2.59 6.219 0 6.242-4.425 13.987-9.865 17.127-1.573.908-3.083 1.481-4.488 1.481zM142.476 178c.814.651 1.82 1.002 2.969 1.002 1.322 0 2.753-.452 4.255-1.32 5.31-3.065 9.631-10.523 9.631-16.617 0-1.98-.463-3.63-1.325-4.793.411 1.035.624 2.26.624 3.62 0 6.242-4.425 13.875-9.865 17.015-1.573.909-3.084 1.376-4.489 1.376a5.49 5.49 0 0 1-1.8-.283z' fill='#607D8B'/><path d='M148.648 176.704c5.384-3.108 9.748-10.636 9.748-16.813 0-2.052-.483-3.693-1.322-4.861-1.785-1.252-4.375-1.194-7.258.471-5.383 3.108-9.748 10.636-9.748 16.813 0 2.051.484 3.692 1.323 4.86 1.785 1.253 4.374 1.195 7.257-.47' fill='#FAFAFA'/><path d='M144.276 178.276c-1.143 0-2.158-.307-3.019-.911a.217.217 0 0 1-.055-.054c-.895-1.244-1.367-2.972-1.367-4.997 0-6.241 4.425-13.875 9.865-17.016 1.573-.908 3.084-1.369 4.489-1.369 1.143 0 2.158.307 3.019.91a.24.24 0 0 1 .055.055c.894 1.244 1.367 2.971 1.367 4.997 0 6.241-4.425 13.875-9.865 17.016-1.573.908-3.084 1.369-4.489 1.369zm-2.718-1.172c.773.533 1.687.901 2.718.901 1.322 0 2.754-.538 4.256-1.405 5.31-3.066 9.631-10.567 9.631-16.661 0-1.908-.434-3.554-1.256-4.716-.774-.532-1.688-.814-2.718-.814-1.322 0-2.754.433-4.256 1.3-5.31 3.066-9.631 10.564-9.631 16.657 0 1.91.434 3.576 1.256 4.738z' fill='#607D8B'/><path d='M150.72 172.361l-.363-.295a24.105 24.105 0 0 0 2.148-3.128 24.05 24.05 0 0 0 1.977-4.375l.443.149a24.54 24.54 0 0 1-2.015 4.46 24.61 24.61 0 0 1-2.19 3.189M115.917 191.514l-.363-.294a24.174 24.174 0 0 0 2.148-3.128 24.038 24.038 0 0 0 1.976-4.375l.443.148a24.48 24.48 0 0 1-2.015 4.461 24.662 24.662 0 0 1-2.189 3.188M114 237.476V182.584 237.476' fill='#607D8B'/><g><path d='M81.822 37.474c.017-.135-.075-.28-.267-.392-.327-.188-.826-.21-1.109-.045l-6.012 3.471c-.131.076-.194.178-.191.285.002.132.002.461.002.578v.043l-.007.128-6.591 3.779c-.001 0-2.077 1.046-2.787 5.192 0 0-.912 6.961-.898 19.745.015 12.57.606 17.07 1.167 21.351.22 1.684 3.001 2.125 3.001 2.125.331.04.698-.027 1.08-.248l75.273-43.551c1.808-1.069 2.667-3.719 3.056-6.284 1.213-7.99 1.675-32.978-.275-39.878-.196-.693-.51-1.083-.868-1.282l-2.086-.79c-.727.028-1.416.467-1.534.535L82.032 37.072l-.21.402' fill='#FFF'/><path d='M144.311 1.701l2.085.79c.358.199.672.589.868 1.282 1.949 6.9 1.487 31.887.275 39.878-.39 2.565-1.249 5.215-3.056 6.284L69.21 93.486a1.78 1.78 0 0 1-.896.258l-.183-.011c0 .001-2.782-.44-3.003-2.124-.56-4.282-1.151-8.781-1.165-21.351-.015-12.784.897-19.745.897-19.745.71-4.146 2.787-5.192 2.787-5.192l6.591-3.779.007-.128v-.043c0-.117 0-.446-.002-.578-.003-.107.059-.21.191-.285l6.012-3.472a.98.98 0 0 1 .481-.11c.218 0 .449.053.627.156.193.112.285.258.268.392l.211-.402 60.744-34.836c.117-.068.806-.507 1.534-.535m0-.997l-.039.001c-.618.023-1.283.244-1.974.656l-.021.012-60.519 34.706a2.358 2.358 0 0 0-.831-.15c-.365 0-.704.084-.98.244l-6.012 3.471c-.442.255-.699.69-.689 1.166l.001.15-6.08 3.487c-.373.199-2.542 1.531-3.29 5.898l-.006.039c-.009.07-.92 7.173-.906 19.875.014 12.62.603 17.116 1.172 21.465l.002.015c.308 2.355 3.475 2.923 3.836 2.98l.034.004c.101.013.204.019.305.019a2.77 2.77 0 0 0 1.396-.392l75.273-43.552c1.811-1.071 2.999-3.423 3.542-6.997 1.186-7.814 1.734-33.096-.301-40.299-.253-.893-.704-1.527-1.343-1.882l-.132-.062-2.085-.789a.973.973 0 0 0-.353-.065' fill='#455A64'/><path d='M128.267 11.565l1.495.434-56.339 32.326' fill='#FFF'/><path d='M74.202 90.545a.5.5 0 0 1-.25-.931l18.437-10.645a.499.499 0 1 1 .499.864L74.451 90.478l-.249.067M75.764 42.654l-.108-.062.046-.171 5.135-2.964.17.045-.045.171-5.135 2.964-.063.017M70.52 90.375V46.421l.063-.036L137.84 7.554v43.954l-.062.036L70.52 90.375zm.25-43.811v43.38l66.821-38.579V7.985L70.77 46.564z' fill='#607D8B'/><path d='M86.986 83.182c-.23.149-.612.384-.849.523l-11.505 6.701c-.237.139-.206.252.068.252h.565c.275 0 .693-.113.93-.252L87.7 83.705c.237-.139.428-.253.425-.256a11.29 11.29 0 0 1-.006-.503c0-.274-.188-.377-.418-.227l-.715.463' fill='#607D8B'/><path d='M75.266 90.782H74.7c-.2 0-.316-.056-.346-.166-.03-.11.043-.217.215-.317l11.505-6.702c.236-.138.615-.371.844-.519l.715-.464a.488.488 0 0 1 .266-.089c.172 0 .345.13.345.421 0 .214.001.363.003.437l.006.004-.004.069c-.003.075-.003.075-.486.356l-11.505 6.702a2.282 2.282 0 0 1-.992.268zm-.6-.25l.034.001h.566c.252 0 .649-.108.866-.234l11.505-6.702c.168-.098.294-.173.361-.214-.004-.084-.004-.218-.004-.437l-.095-.171-.131.049-.714.463c-.232.15-.616.386-.854.525l-11.505 6.702-.029.018z' fill='#607D8B'/><path d='M75.266 89.871H74.7c-.2 0-.316-.056-.346-.166-.03-.11.043-.217.215-.317l11.505-6.702c.258-.151.694-.268.993-.268h.565c.2 0 .316.056.346.166.03.11-.043.217-.215.317l-11.505 6.702a2.282 2.282 0 0 1-.992.268zm-.6-.25l.034.001h.566c.252 0 .649-.107.866-.234l11.505-6.702.03-.018-.035-.001h-.565c-.252 0-.649.108-.867.234l-11.505 6.702-.029.018zM74.37 90.801v-1.247 1.247' fill='#607D8B'/><path d='M68.13 93.901c-.751-.093-1.314-.737-1.439-1.376-.831-4.238-1.151-8.782-1.165-21.352-.015-12.784.897-19.745.897-19.745.711-4.146 2.787-5.192 2.787-5.192l74.859-43.219c.223-.129 2.487-1.584 3.195.923 1.95 6.9 1.488 31.887.275 39.878-.389 2.565-1.248 5.215-3.056 6.283L69.21 93.653c-.382.221-.749.288-1.08.248 0 0-2.781-.441-3.001-2.125-.561-4.281-1.152-8.781-1.167-21.351-.014-12.784.898-19.745.898-19.745.71-4.146 2.787-5.191 2.787-5.191l6.598-3.81.871-.119 6.599-3.83.046-.461L68.13 93.901' fill='#FAFAFA'/><path d='M68.317 94.161l-.215-.013h-.001l-.244-.047c-.719-.156-2.772-.736-2.976-2.292-.568-4.34-1.154-8.813-1.168-21.384-.014-12.654.891-19.707.9-19.777.725-4.231 2.832-5.338 2.922-5.382l6.628-3.827.87-.119 6.446-3.742.034-.334a.248.248 0 0 1 .273-.223.248.248 0 0 1 .223.272l-.059.589-6.752 3.919-.87.118-6.556 3.785c-.031.016-1.99 1.068-2.666 5.018-.007.06-.908 7.086-.894 19.702.014 12.539.597 16.996 1.161 21.305.091.691.689 1.154 1.309 1.452a1.95 1.95 0 0 1-.236-.609c-.781-3.984-1.155-8.202-1.17-21.399-.014-12.653.891-19.707.9-19.777.725-4.231 2.832-5.337 2.922-5.382-.004.001 74.444-42.98 74.846-43.212l.028-.017c.904-.538 1.72-.688 2.36-.433.555.221.949.733 1.172 1.52 2.014 7.128 1.46 32.219.281 39.983-.507 3.341-1.575 5.515-3.175 6.462L69.335 93.869a2.023 2.023 0 0 1-1.018.292zm-.147-.507c.293.036.604-.037.915-.217l75.273-43.551c1.823-1.078 2.602-3.915 2.934-6.106 1.174-7.731 1.731-32.695-.268-39.772-.178-.631-.473-1.032-.876-1.192-.484-.193-1.166-.052-1.921.397l-.034.021-74.858 43.218c-.031.017-1.989 1.069-2.666 5.019-.007.059-.908 7.085-.894 19.702.015 13.155.386 17.351 1.161 21.303.09.461.476.983 1.037 1.139.114.025.185.037.196.039h.001z' fill='#455A64'/><path d='M69.317 68.982c.489-.281.885-.056.885.505 0 .56-.396 1.243-.885 1.525-.488.282-.884.057-.884-.504 0-.56.396-1.243.884-1.526' fill='#FFF'/><path d='M68.92 71.133c-.289 0-.487-.228-.487-.625 0-.56.396-1.243.884-1.526a.812.812 0 0 1 .397-.121c.289 0 .488.229.488.626 0 .56-.396 1.243-.885 1.525a.812.812 0 0 1-.397.121m.794-2.459a.976.976 0 0 0-.49.147c-.548.317-.978 1.058-.978 1.687 0 .486.271.812.674.812a.985.985 0 0 0 .491-.146c.548-.317.978-1.057.978-1.687 0-.486-.272-.813-.675-.813' fill='#8097A2'/><path d='M68.92 70.947c-.271 0-.299-.307-.299-.439 0-.491.361-1.116.79-1.363a.632.632 0 0 1 .303-.096c.272 0 .301.306.301.438 0 .491-.363 1.116-.791 1.364a.629.629 0 0 1-.304.096m.794-2.086a.812.812 0 0 0-.397.121c-.488.283-.884.966-.884 1.526 0 .397.198.625.487.625a.812.812 0 0 0 .397-.121c.489-.282.885-.965.885-1.525 0-.397-.199-.626-.488-.626' fill='#8097A2'/><path d='M69.444 85.35c.264-.152.477-.031.477.272 0 .303-.213.67-.477.822-.263.153-.477.031-.477-.271 0-.302.214-.671.477-.823' fill='#FFF'/><path d='M69.23 86.51c-.156 0-.263-.123-.263-.337 0-.302.214-.671.477-.823a.431.431 0 0 1 .214-.066c.156 0 .263.124.263.338 0 .303-.213.67-.477.822a.431.431 0 0 1-.214.066m.428-1.412c-.1 0-.203.029-.307.09-.32.185-.57.618-.57.985 0 .309.185.524.449.524a.63.63 0 0 0 .308-.09c.32-.185.57-.618.57-.985 0-.309-.185-.524-.45-.524' fill='#8097A2'/><path d='M69.23 86.322l-.076-.149c0-.235.179-.544.384-.661l.12-.041.076.151c0 .234-.179.542-.383.66l-.121.04m.428-1.038a.431.431 0 0 0-.214.066c-.263.152-.477.521-.477.823 0 .214.107.337.263.337a.431.431 0 0 0 .214-.066c.264-.152.477-.519.477-.822 0-.214-.107-.338-.263-.338' fill='#8097A2'/><path d='M139.278 7.769v43.667L72.208 90.16V46.493l67.07-38.724' fill='#455A64'/><path d='M72.083 90.375V46.421l.063-.036 67.257-38.831v43.954l-.062.036-67.258 38.831zm.25-43.811v43.38l66.821-38.579V7.985L72.333 46.564z' fill='#607D8B'/></g><path d='M125.737 88.647l-7.639 3.334V84l-11.459 4.713v8.269L99 100.315l13.369 3.646 13.368-15.314' fill='#455A64'/></g></svg>";function Ie(){this.loadIcon_();var e=document.createElement("div");(s=e.style).position="fixed",s.top=0,s.right=0,s.bottom=0,s.left=0,s.backgroundColor="gray",s.fontFamily="sans-serif",s.zIndex=1e6;var t=document.createElement("img");t.src=this.icon,(s=t.style).marginLeft="25%",s.marginTop="25%",s.width="50%",e.appendChild(t);var i=document.createElement("div");(s=i.style).textAlign="center",s.fontSize="16px",s.lineHeight="24px",s.margin="24px 25%",s.width="50%",i.innerHTML="Place your phone into your Cardboard viewer.",e.appendChild(i);var r=document.createElement("div");(s=r.style).backgroundColor="#CFD8DC",s.position="fixed",s.bottom=0,s.width="100%",s.height="48px",s.padding="14px 24px",s.boxSizing="border-box",s.color="#656A6B",e.appendChild(r);var n=document.createElement("div");n.style.float="left",n.innerHTML="No Cardboard viewer?";var s,a=document.createElement("a");a.href="https://www.google.com/get/cardboard/get-cardboard/",a.innerHTML="get one",a.target="_blank",(s=a.style).float="right",s.fontWeight=600,s.textTransform="uppercase",s.borderLeft="1px solid gray",s.paddingLeft="24px",s.textDecoration="none",s.color="#656A6B",r.appendChild(n),r.appendChild(a),this.overlay=e,this.text=i,this.hide()}Ie.prototype.show=function(e){e||this.overlay.parentElement?e&&(this.overlay.parentElement&&this.overlay.parentElement!=e&&this.overlay.parentElement.removeChild(this.overlay),e.appendChild(this.overlay)):document.body.appendChild(this.overlay),this.overlay.style.display="block";var t=this.overlay.querySelector("img").style;x()?(t.width="20%",t.marginLeft="40%",t.marginTop="3%"):(t.width="50%",t.marginLeft="25%",t.marginTop="25%")},Ie.prototype.hide=function(){this.overlay.style.display="none"},Ie.prototype.showTemporarily=function(e,t){this.show(t),this.timer=setTimeout(this.hide.bind(this),e)},Ie.prototype.disableShowTemporarily=function(){clearTimeout(this.timer)},Ie.prototype.update=function(){this.disableShowTemporarily(),!x()&&D()?this.show():this.hide()},Ie.prototype.loadIcon_=function(){this.icon=A("image/svg+xml",De)};var Le="CardboardV1",Oe="WEBVR_CARDBOARD_VIEWER",Ne="webvr-polyfill-viewer-selector";function Ge(e){try{this.selectedKey=localStorage.getItem(Oe)}catch(e){console.error("Failed to load viewer profile: %s",e)}this.selectedKey||(this.selectedKey=e||Le),this.dialog=this.createDialog_(ve.Viewers),this.root=null,this.onChangeCallbacks_=[]}function Ve(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function ke(e,t){return e(t={exports:{}},t.exports),t.exports}Ge.prototype.show=function(e){this.root=e,e.appendChild(this.dialog),this.dialog.querySelector("#"+this.selectedKey).checked=!0,this.dialog.style.display="block"},Ge.prototype.hide=function(){this.root&&this.root.contains(this.dialog)&&this.root.removeChild(this.dialog),this.dialog.style.display="none"},Ge.prototype.getCurrentViewer=function(){return ve.Viewers[this.selectedKey]},Ge.prototype.getSelectedKey_=function(){var e=this.dialog.querySelector("input[name=field]:checked");return e?e.id:null},Ge.prototype.onChange=function(e){this.onChangeCallbacks_.push(e)},Ge.prototype.fireOnChange_=function(e){for(var t=0;t<this.onChangeCallbacks_.length;t++)this.onChangeCallbacks_[t](e)},Ge.prototype.onSave_=function(){if(this.selectedKey=this.getSelectedKey_(),this.selectedKey&&ve.Viewers[this.selectedKey]){this.fireOnChange_(ve.Viewers[this.selectedKey]);try{localStorage.setItem(Oe,this.selectedKey)}catch(e){console.error("Failed to save viewer profile: %s",e)}this.hide()}else console.error("ViewerSelector.onSave_: this should never happen!")},Ge.prototype.createDialog_=function(e){var t=document.createElement("div");t.classList.add(Ne),t.style.display="none";var i=document.createElement("div");(s=i.style).position="fixed",s.left=0,s.top=0,s.width="100%",s.height="100%",s.background="rgba(0, 0, 0, 0.3)",i.addEventListener("click",this.hide.bind(this));var r=280,n=document.createElement("div"),s=n.style;for(var a in s.boxSizing="border-box",s.position="fixed",s.top="24px",s.left="50%",s.marginLeft=-r/2+"px",s.width=r+"px",s.padding="24px",s.overflow="hidden",s.background="#fafafa",s.fontFamily="'Roboto', sans-serif",s.boxShadow="0px 5px 20px #666",n.appendChild(this.createH1_("Select your viewer")),e)n.appendChild(this.createChoice_(a,e[a].label));return n.appendChild(this.createButton_("Save",this.onSave_.bind(this))),t.appendChild(i),t.appendChild(n),t},Ge.prototype.createH1_=function(e){var t=document.createElement("h1"),i=t.style;return i.color="black",i.fontSize="20px",i.fontWeight="bold",i.marginTop=0,i.marginBottom="24px",t.innerHTML=e,t},Ge.prototype.createChoice_=function(e,t){var i=document.createElement("div");i.style.marginTop="8px",i.style.color="black";var r=document.createElement("input");r.style.fontSize="30px",r.setAttribute("id",e),r.setAttribute("type","radio"),r.setAttribute("value",e),r.setAttribute("name","field");var n=document.createElement("label");return n.style.marginLeft="4px",n.setAttribute("for",e),n.innerHTML=t,i.appendChild(r),i.appendChild(n),i},Ge.prototype.createButton_=function(e,t){var i=document.createElement("button");i.innerHTML=e;var r=i.style;return r.float="right",r.textTransform="uppercase",r.color="#1094f7",r.fontSize="14px",r.letterSpacing=0,r.border=0,r.background="none",r.marginTop="16px",i.addEventListener("click",t),i},"undefined"!=typeof window?window:void 0!==Te||"undefined"!=typeof self&&self;var ze=ke((function(e,t){!function(t,i){e.exports=i()}(0,(function(){return function(e){var t={};function i(r){if(t[r])return t[r].exports;var n=t[r]={i:r,l:!1,exports:{}};return e[r].call(n.exports,n,n.exports,i),n.l=!0,n.exports}return i.m=e,i.c=t,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i(i.s=0)}([function(e,t,i){var r=function(){function e(e,t){for(var i=0;i<t.length;i++){var r=t[i];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,i,r){return i&&e(t.prototype,i),r&&e(t,r),t}}();function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var s=i(1),a="undefined"!=typeof navigator&&parseFloat((""+(/CPU.*OS ([0-9_]{3,4})[0-9_]{0,1}|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,""])[1]).replace("undefined","3_2").replace("_",".").replace("_",""))<10&&!window.MSStream,o=function(){function e(){n(this,e),a?this.noSleepTimer=null:(this.noSleepVideo=document.createElement("video"),this.noSleepVideo.setAttribute("playsinline",""),this.noSleepVideo.setAttribute("src",s),this.noSleepVideo.addEventListener("timeupdate",function(e){this.noSleepVideo.currentTime>.5&&(this.noSleepVideo.currentTime=Math.random())}.bind(this)))}return r(e,[{key:"enable",value:function(){a?(this.disable(),this.noSleepTimer=window.setInterval((function(){window.location.href="/",window.setTimeout(window.stop,0)}),15e3)):this.noSleepVideo.play()}},{key:"disable",value:function(){a?this.noSleepTimer&&(window.clearInterval(this.noSleepTimer),this.noSleepTimer=null):this.noSleepVideo.pause()}}]),e}();e.exports=o},function(e,t,i){e.exports="data:video/mp4;base64,AAAAIGZ0eXBtcDQyAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQAACKBtZGF0AAAC8wYF///v3EXpvebZSLeWLNgg2SPu73gyNjQgLSBjb3JlIDE0MiByMjQ3OSBkZDc5YTYxIC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENvcHlsZWZ0IDIwMDMtMjAxNCAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTEgcmVmPTEgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MToweDExMSBtZT1oZXggc3VibWU9MiBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0wIG1lX3JhbmdlPTE2IGNocm9tYV9tZT0xIHRyZWxsaXM9MCA4eDhkY3Q9MCBjcW09MCBkZWFkem9uZT0yMSwxMSBmYXN0X3Bza2lwPTEgY2hyb21hX3FwX29mZnNldD0wIHRocmVhZHM9NiBsb29rYWhlYWRfdGhyZWFkcz0xIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFjZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTMgYl9weXJhbWlkPTIgYl9hZGFwdD0xIGJfYmlhcz0wIGRpcmVjdD0xIHdlaWdodGI9MSBvcGVuX2dvcD0wIHdlaWdodHA9MSBrZXlpbnQ9MzAwIGtleWludF9taW49MzAgc2NlbmVjdXQ9NDAgaW50cmFfcmVmcmVzaD0wIHJjX2xvb2thaGVhZD0xMCByYz1jcmYgbWJ0cmVlPTEgY3JmPTIwLjAgcWNvbXA9MC42MCBxcG1pbj0wIHFwbWF4PTY5IHFwc3RlcD00IHZidl9tYXhyYXRlPTIwMDAwIHZidl9idWZzaXplPTI1MDAwIGNyZl9tYXg9MC4wIG5hbF9ocmQ9bm9uZSBmaWxsZXI9MCBpcF9yYXRpbz0xLjQwIGFxPTE6MS4wMACAAAAAOWWIhAA3//p+C7v8tDDSTjf97w55i3SbRPO4ZY+hkjD5hbkAkL3zpJ6h/LR1CAABzgB1kqqzUorlhQAAAAxBmiQYhn/+qZYADLgAAAAJQZ5CQhX/AAj5IQADQGgcIQADQGgcAAAACQGeYUQn/wALKCEAA0BoHAAAAAkBnmNEJ/8ACykhAANAaBwhAANAaBwAAAANQZpoNExDP/6plgAMuSEAA0BoHAAAAAtBnoZFESwr/wAI+SEAA0BoHCEAA0BoHAAAAAkBnqVEJ/8ACykhAANAaBwAAAAJAZ6nRCf/AAsoIQADQGgcIQADQGgcAAAADUGarDRMQz/+qZYADLghAANAaBwAAAALQZ7KRRUsK/8ACPkhAANAaBwAAAAJAZ7pRCf/AAsoIQADQGgcIQADQGgcAAAACQGe60Qn/wALKCEAA0BoHAAAAA1BmvA0TEM//qmWAAy5IQADQGgcIQADQGgcAAAAC0GfDkUVLCv/AAj5IQADQGgcAAAACQGfLUQn/wALKSEAA0BoHCEAA0BoHAAAAAkBny9EJ/8ACyghAANAaBwAAAANQZs0NExDP/6plgAMuCEAA0BoHAAAAAtBn1JFFSwr/wAI+SEAA0BoHCEAA0BoHAAAAAkBn3FEJ/8ACyghAANAaBwAAAAJAZ9zRCf/AAsoIQADQGgcIQADQGgcAAAADUGbeDRMQz/+qZYADLkhAANAaBwAAAALQZ+WRRUsK/8ACPghAANAaBwhAANAaBwAAAAJAZ+1RCf/AAspIQADQGgcAAAACQGft0Qn/wALKSEAA0BoHCEAA0BoHAAAAA1Bm7w0TEM//qmWAAy4IQADQGgcAAAAC0Gf2kUVLCv/AAj5IQADQGgcAAAACQGf+UQn/wALKCEAA0BoHCEAA0BoHAAAAAkBn/tEJ/8ACykhAANAaBwAAAANQZvgNExDP/6plgAMuSEAA0BoHCEAA0BoHAAAAAtBnh5FFSwr/wAI+CEAA0BoHAAAAAkBnj1EJ/8ACyghAANAaBwhAANAaBwAAAAJAZ4/RCf/AAspIQADQGgcAAAADUGaJDRMQz/+qZYADLghAANAaBwAAAALQZ5CRRUsK/8ACPkhAANAaBwhAANAaBwAAAAJAZ5hRCf/AAsoIQADQGgcAAAACQGeY0Qn/wALKSEAA0BoHCEAA0BoHAAAAA1Bmmg0TEM//qmWAAy5IQADQGgcAAAAC0GehkUVLCv/AAj5IQADQGgcIQADQGgcAAAACQGepUQn/wALKSEAA0BoHAAAAAkBnqdEJ/8ACyghAANAaBwAAAANQZqsNExDP/6plgAMuCEAA0BoHCEAA0BoHAAAAAtBnspFFSwr/wAI+SEAA0BoHAAAAAkBnulEJ/8ACyghAANAaBwhAANAaBwAAAAJAZ7rRCf/AAsoIQADQGgcAAAADUGa8DRMQz/+qZYADLkhAANAaBwhAANAaBwAAAALQZ8ORRUsK/8ACPkhAANAaBwAAAAJAZ8tRCf/AAspIQADQGgcIQADQGgcAAAACQGfL0Qn/wALKCEAA0BoHAAAAA1BmzQ0TEM//qmWAAy4IQADQGgcAAAAC0GfUkUVLCv/AAj5IQADQGgcIQADQGgcAAAACQGfcUQn/wALKCEAA0BoHAAAAAkBn3NEJ/8ACyghAANAaBwhAANAaBwAAAANQZt4NExC//6plgAMuSEAA0BoHAAAAAtBn5ZFFSwr/wAI+CEAA0BoHCEAA0BoHAAAAAkBn7VEJ/8ACykhAANAaBwAAAAJAZ+3RCf/AAspIQADQGgcAAAADUGbuzRMQn/+nhAAYsAhAANAaBwhAANAaBwAAAAJQZ/aQhP/AAspIQADQGgcAAAACQGf+UQn/wALKCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHAAACiFtb292AAAAbG12aGQAAAAA1YCCX9WAgl8AAAPoAAAH/AABAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAGGlvZHMAAAAAEICAgAcAT////v7/AAAF+XRyYWsAAABcdGtoZAAAAAPVgIJf1YCCXwAAAAEAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAygAAAMoAAAAAACRlZHRzAAAAHGVsc3QAAAAAAAAAAQAAB9AAABdwAAEAAAAABXFtZGlhAAAAIG1kaGQAAAAA1YCCX9WAgl8AAV+QAAK/IFXEAAAAAAAtaGRscgAAAAAAAAAAdmlkZQAAAAAAAAAAAAAAAFZpZGVvSGFuZGxlcgAAAAUcbWluZgAAABR2bWhkAAAAAQAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAAE3HN0YmwAAACYc3RzZAAAAAAAAAABAAAAiGF2YzEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAygDKAEgAAABIAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY//8AAAAyYXZjQwFNQCj/4QAbZ01AKOyho3ySTUBAQFAAAAMAEAAr8gDxgxlgAQAEaO+G8gAAABhzdHRzAAAAAAAAAAEAAAA8AAALuAAAABRzdHNzAAAAAAAAAAEAAAABAAAB8GN0dHMAAAAAAAAAPAAAAAEAABdwAAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAAC7gAAAAAQAAF3AAAAABAAAAAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAQAAAAEAAAEEc3RzegAAAAAAAAAAAAAAPAAAAzQAAAAQAAAADQAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAANAAAADQAAAQBzdGNvAAAAAAAAADwAAAAwAAADZAAAA3QAAAONAAADoAAAA7kAAAPQAAAD6wAAA/4AAAQXAAAELgAABEMAAARcAAAEbwAABIwAAAShAAAEugAABM0AAATkAAAE/wAABRIAAAUrAAAFQgAABV0AAAVwAAAFiQAABaAAAAW1AAAFzgAABeEAAAX+AAAGEwAABiwAAAY/AAAGVgAABnEAAAaEAAAGnQAABrQAAAbPAAAG4gAABvUAAAcSAAAHJwAAB0AAAAdTAAAHcAAAB4UAAAeeAAAHsQAAB8gAAAfjAAAH9gAACA8AAAgmAAAIQQAACFQAAAhnAAAIhAAACJcAAAMsdHJhawAAAFx0a2hkAAAAA9WAgl/VgIJfAAAAAgAAAAAAAAf8AAAAAAAAAAAAAAABAQAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAACsm1kaWEAAAAgbWRoZAAAAADVgIJf1YCCXwAArEQAAWAAVcQAAAAAACdoZGxyAAAAAAAAAABzb3VuAAAAAAAAAAAAAAAAU3RlcmVvAAAAAmNtaW5mAAAAEHNtaGQAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAidzdGJsAAAAZ3N0c2QAAAAAAAAAAQAAAFdtcDRhAAAAAAAAAAEAAAAAAAAAAAACABAAAAAArEQAAAAAADNlc2RzAAAAAAOAgIAiAAIABICAgBRAFQAAAAADDUAAAAAABYCAgAISEAaAgIABAgAAABhzdHRzAAAAAAAAAAEAAABYAAAEAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAQAAAAEAAAAUc3RzegAAAAAAAAAGAAAAWAAAAXBzdGNvAAAAAAAAAFgAAAOBAAADhwAAA5oAAAOtAAADswAAA8oAAAPfAAAD5QAAA/gAAAQLAAAEEQAABCgAAAQ9AAAEUAAABFYAAARpAAAEgAAABIYAAASbAAAErgAABLQAAATHAAAE3gAABPMAAAT5AAAFDAAABR8AAAUlAAAFPAAABVEAAAVXAAAFagAABX0AAAWDAAAFmgAABa8AAAXCAAAFyAAABdsAAAXyAAAF+AAABg0AAAYgAAAGJgAABjkAAAZQAAAGZQAABmsAAAZ+AAAGkQAABpcAAAauAAAGwwAABskAAAbcAAAG7wAABwYAAAcMAAAHIQAABzQAAAc6AAAHTQAAB2QAAAdqAAAHfwAAB5IAAAeYAAAHqwAAB8IAAAfXAAAH3QAAB/AAAAgDAAAICQAACCAAAAg1AAAIOwAACE4AAAhhAAAIeAAACH4AAAiRAAAIpAAACKoAAAiwAAAItgAACLwAAAjCAAAAFnVkdGEAAAAObmFtZVN0ZXJlbwAAAHB1ZHRhAAAAaG1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAAO2lsc3QAAAAzqXRvbwAAACtkYXRhAAAAAQAAAABIYW5kQnJha2UgMC4xMC4yIDIwMTUwNjExMDA="}])}))})),Qe=Ve(ze),Ue=1e3,Xe=[0,0,.5,1],He=[.5,0,.5,1],We=window.requestAnimationFrame,qe=window.cancelAnimationFrame;function je(){this.leftProjectionMatrix=new Float32Array(16),this.leftViewMatrix=new Float32Array(16),this.rightProjectionMatrix=new Float32Array(16),this.rightViewMatrix=new Float32Array(16),this.pose=null}function Ye(e){Object.defineProperties(this,{hasPosition:{writable:!1,enumerable:!0,value:e.hasPosition},hasExternalDisplay:{writable:!1,enumerable:!0,value:e.hasExternalDisplay},canPresent:{writable:!1,enumerable:!0,value:e.canPresent},maxLayers:{writable:!1,enumerable:!0,value:e.maxLayers},hasOrientation:{enumerable:!0,get:function(){return z("VRDisplayCapabilities.prototype.hasOrientation","VRDisplay.prototype.getFrameData"),e.hasOrientation}}})}function Ze(e){var t=!("wakelock"in(e=e||{}))||e.wakelock;this.isPolyfilled=!0,this.displayId=Ue++,this.displayName="",this.depthNear=.01,this.depthFar=1e4,this.isPresenting=!1,Object.defineProperty(this,"isConnected",{get:function(){return z("VRDisplay.prototype.isConnected","VRDisplayCapabilities.prototype.hasExternalDisplay"),!1}}),this.capabilities=new Ye({hasPosition:!1,hasOrientation:!1,hasExternalDisplay:!1,canPresent:!1,maxLayers:1}),this.stageParameters=null,this.waitingForPresent_=!1,this.layer_=null,this.originalParent_=null,this.fullscreenElement_=null,this.fullscreenWrapper_=null,this.fullscreenElementCachedStyle_=null,this.fullscreenEventTarget_=null,this.fullscreenChangeHandler_=null,this.fullscreenErrorHandler_=null,t&&D()&&(this.wakelock_=new Qe)}Ze.prototype.getFrameData=function(e){return O(e,this._getPose(),this)},Ze.prototype.getPose=function(){return z("VRDisplay.prototype.getPose","VRDisplay.prototype.getFrameData"),this._getPose()},Ze.prototype.resetPose=function(){return z("VRDisplay.prototype.resetPose"),this._resetPose()},Ze.prototype.getImmediatePose=function(){return z("VRDisplay.prototype.getImmediatePose","VRDisplay.prototype.getFrameData"),this._getPose()},Ze.prototype.requestAnimationFrame=function(e){return We(e)},Ze.prototype.cancelAnimationFrame=function(e){return qe(e)},Ze.prototype.wrapForFullscreen=function(e){if(f())return e;if(!this.fullscreenWrapper_){this.fullscreenWrapper_=document.createElement("div");var t=["height: "+Math.min(screen.height,screen.width)+"px !important","top: 0 !important","left: 0 !important","right: 0 !important","border: 0","margin: 0","padding: 0","z-index: 999999 !important","position: fixed"];this.fullscreenWrapper_.setAttribute("style",t.join("; ")+";"),this.fullscreenWrapper_.classList.add("webvr-polyfill-fullscreen-wrapper")}if(this.fullscreenElement_==e)return this.fullscreenWrapper_;if(this.fullscreenElement_&&(this.originalParent_?this.originalParent_.appendChild(this.fullscreenElement_):this.fullscreenElement_.parentElement.removeChild(this.fullscreenElement_)),this.fullscreenElement_=e,this.originalParent_=e.parentElement,this.originalParent_||document.body.appendChild(e),!this.fullscreenWrapper_.parentElement){var i=this.fullscreenElement_.parentElement;i.insertBefore(this.fullscreenWrapper_,this.fullscreenElement_),i.removeChild(this.fullscreenElement_)}this.fullscreenWrapper_.insertBefore(this.fullscreenElement_,this.fullscreenWrapper_.firstChild),this.fullscreenElementCachedStyle_=this.fullscreenElement_.getAttribute("style");var r=this;function n(){if(r.fullscreenElement_){var e=["position: absolute","top: 0","left: 0","width: "+Math.max(screen.width,screen.height)+"px","height: "+Math.min(screen.height,screen.width)+"px","border: 0","margin: 0","padding: 0"];r.fullscreenElement_.setAttribute("style",e.join("; ")+";")}}return n(),this.fullscreenWrapper_},Ze.prototype.removeFullscreenWrapper=function(){if(this.fullscreenElement_){var e=this.fullscreenElement_;this.fullscreenElementCachedStyle_?e.setAttribute("style",this.fullscreenElementCachedStyle_):e.removeAttribute("style"),this.fullscreenElement_=null,this.fullscreenElementCachedStyle_=null;var t=this.fullscreenWrapper_.parentElement;return this.fullscreenWrapper_.removeChild(e),this.originalParent_===t?t.insertBefore(e,this.fullscreenWrapper_):this.originalParent_&&this.originalParent_.appendChild(e),t.removeChild(this.fullscreenWrapper_),e}},Ze.prototype.requestPresent=function(e){var t=this.isPresenting,i=this;return e instanceof Array||(z("VRDisplay.prototype.requestPresent with non-array argument","an array of VRLayers as the first argument"),e=[e]),new Promise((function(r,n){if(i.capabilities.canPresent)if(0==e.length||e.length>i.capabilities.maxLayers)n(new Error("Invalid number of layers."));else{var s=e[0];if(s.source){var a=s.leftBounds||Xe,o=s.rightBounds||He;if(t){var l=i.layer_;l.source!==s.source&&(l.source=s.source);for(var c=0;c<4;c++)l.leftBounds[c]=a[c],l.rightBounds[c]=o[c];return i.wrapForFullscreen(i.layer_.source),i.updatePresent_(),void r()}if(i.layer_={predistorted:s.predistorted,source:s.source,leftBounds:a.slice(0),rightBounds:o.slice(0)},i.waitingForPresent_=!1,i.layer_&&i.layer_.source){var h=i.wrapForFullscreen(i.layer_.source),u=function(){var e=T();i.isPresenting=h===e,i.isPresenting?(screen.orientation&&screen.orientation.lock&&screen.orientation.lock("landscape-primary").catch((function(e){console.error("screen.orientation.lock() failed due to",e.message)})),i.waitingForPresent_=!1,i.beginPresent_(),r()):(screen.orientation&&screen.orientation.unlock&&screen.orientation.unlock(),i.removeFullscreenWrapper(),i.disableWakeLock(),i.endPresent_(),i.removeFullscreenListeners_()),i.fireVRDisplayPresentChange_()},d=function(){i.waitingForPresent_&&(i.removeFullscreenWrapper(),i.removeFullscreenListeners_(),i.disableWakeLock(),i.waitingForPresent_=!1,i.isPresenting=!1,n(new Error("Unable to present.")))};i.addFullscreenListeners_(h,u,d),R(h)?(i.enableWakeLock(),i.waitingForPresent_=!0):(f()||m())&&(i.enableWakeLock(),i.isPresenting=!0,i.beginPresent_(),i.fireVRDisplayPresentChange_(),r())}i.waitingForPresent_||f()||(F(),n(new Error("Unable to present.")))}else r()}else n(new Error("VRDisplay is not capable of presenting."))}))},Ze.prototype.exitPresent=function(){var e=this.isPresenting,t=this;return this.isPresenting=!1,this.layer_=null,this.disableWakeLock(),new Promise((function(i,r){e?(!F()&&f()&&(t.endPresent_(),t.fireVRDisplayPresentChange_()),m()&&(t.removeFullscreenWrapper(),t.removeFullscreenListeners_(),t.endPresent_(),t.fireVRDisplayPresentChange_()),i()):r(new Error("Was not presenting to VRDisplay."))}))},Ze.prototype.getLayers=function(){return this.layer_?[this.layer_]:[]},Ze.prototype.fireVRDisplayPresentChange_=function(){var e=new CustomEvent("vrdisplaypresentchange",{detail:{display:this}});window.dispatchEvent(e)},Ze.prototype.fireVRDisplayConnect_=function(){var e=new CustomEvent("vrdisplayconnect",{detail:{display:this}});window.dispatchEvent(e)},Ze.prototype.addFullscreenListeners_=function(e,t,i){this.removeFullscreenListeners_(),this.fullscreenEventTarget_=e,this.fullscreenChangeHandler_=t,this.fullscreenErrorHandler_=i,t&&(document.fullscreenEnabled?e.addEventListener("fullscreenchange",t,!1):document.webkitFullscreenEnabled?e.addEventListener("webkitfullscreenchange",t,!1):document.mozFullScreenEnabled?document.addEventListener("mozfullscreenchange",t,!1):document.msFullscreenEnabled&&e.addEventListener("msfullscreenchange",t,!1)),i&&(document.fullscreenEnabled?e.addEventListener("fullscreenerror",i,!1):document.webkitFullscreenEnabled?e.addEventListener("webkitfullscreenerror",i,!1):document.mozFullScreenEnabled?document.addEventListener("mozfullscreenerror",i,!1):document.msFullscreenEnabled&&e.addEventListener("msfullscreenerror",i,!1))},Ze.prototype.removeFullscreenListeners_=function(){if(this.fullscreenEventTarget_){var e=this.fullscreenEventTarget_;if(this.fullscreenChangeHandler_){var t=this.fullscreenChangeHandler_;e.removeEventListener("fullscreenchange",t,!1),e.removeEventListener("webkitfullscreenchange",t,!1),document.removeEventListener("mozfullscreenchange",t,!1),e.removeEventListener("msfullscreenchange",t,!1)}if(this.fullscreenErrorHandler_){var i=this.fullscreenErrorHandler_;e.removeEventListener("fullscreenerror",i,!1),e.removeEventListener("webkitfullscreenerror",i,!1),document.removeEventListener("mozfullscreenerror",i,!1),e.removeEventListener("msfullscreenerror",i,!1)}this.fullscreenEventTarget_=null,this.fullscreenChangeHandler_=null,this.fullscreenErrorHandler_=null}},Ze.prototype.enableWakeLock=function(){this.wakelock_&&this.wakelock_.enable()},Ze.prototype.disableWakeLock=function(){this.wakelock_&&this.wakelock_.disable()},Ze.prototype.beginPresent_=function(){},Ze.prototype.endPresent_=function(){},Ze.prototype.submitFrame=function(e){},Ze.prototype.getEyeParameters=function(e){return null};var $e={ADDITIONAL_VIEWERS:[],DEFAULT_VIEWER:"",MOBILE_WAKE_LOCK:!0,DEBUG:!1,DPDB_URL:"https://dpdb.webvr.rocks/dpdb.json",K_FILTER:.98,PREDICTION_TIME_S:.04,CARDBOARD_UI_DISABLED:!1,ROTATE_INSTRUCTIONS_DISABLED:!1,YAW_ONLY:!1,BUFFER_SCALE:.5,DIRTY_SUBMIT_FRAME_BINDINGS:!1},Ke={LEFT:"left",RIGHT:"right"};function Je(e){var t=I({},$e);e=I(t,e||{}),Ze.call(this,{wakelock:e.MOBILE_WAKE_LOCK}),this.config=e,this.displayName="Cardboard VRDisplay",this.capabilities=new Ye({hasPosition:!1,hasOrientation:!0,hasExternalDisplay:!1,canPresent:!0,maxLayers:1}),this.stageParameters=null,this.bufferScale_=this.config.BUFFER_SCALE,this.poseSensor_=new Be(this.config),this.distorter_=null,this.cardboardUI_=null,this.dpdb_=new be(this.config.DPDB_URL,this.onDeviceParamsUpdated_.bind(this)),this.deviceInfo_=new ve(this.dpdb_.getDeviceParams(),e.ADDITIONAL_VIEWERS),this.viewerSelector_=new Ge(e.DEFAULT_VIEWER),this.viewerSelector_.onChange(this.onViewerChanged_.bind(this)),this.deviceInfo_.setViewer(this.viewerSelector_.getCurrentViewer()),this.config.ROTATE_INSTRUCTIONS_DISABLED||(this.rotateInstructions_=new Ie),f()&&window.addEventListener("resize",this.onResize_.bind(this))}return Je.prototype=Object.create(Ze.prototype),Je.prototype._getPose=function(){return{position:null,orientation:this.poseSensor_.getOrientation(),linearVelocity:null,linearAcceleration:null,angularVelocity:null,angularAcceleration:null}},Je.prototype._resetPose=function(){this.poseSensor_.resetPose&&this.poseSensor_.resetPose()},Je.prototype._getFieldOfView=function(e){var t;if(e==Ke.LEFT)t=this.deviceInfo_.getFieldOfViewLeftEye();else{if(e!=Ke.RIGHT)return console.error("Invalid eye provided: %s",e),null;t=this.deviceInfo_.getFieldOfViewRightEye()}return t},Je.prototype._getEyeOffset=function(e){var t;if(e==Ke.LEFT)t=[.5*-this.deviceInfo_.viewer.interLensDistance,0,0];else{if(e!=Ke.RIGHT)return console.error("Invalid eye provided: %s",e),null;t=[.5*this.deviceInfo_.viewer.interLensDistance,0,0]}return t},Je.prototype.getEyeParameters=function(e){var t=this._getEyeOffset(e),i=this._getFieldOfView(e),r={offset:t,renderWidth:.5*this.deviceInfo_.device.width*this.bufferScale_,renderHeight:this.deviceInfo_.device.height*this.bufferScale_};return Object.defineProperty(r,"fieldOfView",{enumerable:!0,get:function(){return z("VRFieldOfView","VRFrameData's projection matrices"),i}}),r},Je.prototype.onDeviceParamsUpdated_=function(e){this.config.DEBUG&&console.log("DPDB reported that device params were updated."),this.deviceInfo_.updateDeviceParams(e),this.distorter_&&this.distorter_.updateDeviceInfo(this.deviceInfo_)},Je.prototype.updateBounds_=function(){this.layer_&&this.distorter_&&(this.layer_.leftBounds||this.layer_.rightBounds)&&this.distorter_.setTextureBounds(this.layer_.leftBounds,this.layer_.rightBounds)},Je.prototype.beginPresent_=function(){var e=this.layer_.source.getContext("webgl");e||(e=this.layer_.source.getContext("experimental-webgl")),e||(e=this.layer_.source.getContext("webgl2")),e&&(this.layer_.predistorted?this.config.CARDBOARD_UI_DISABLED||(e.canvas.width=S()*this.bufferScale_,e.canvas.height=_()*this.bufferScale_,this.cardboardUI_=new se(e)):(this.config.CARDBOARD_UI_DISABLED||(this.cardboardUI_=new se(e)),this.distorter_=new W(e,this.cardboardUI_,this.config.BUFFER_SCALE,this.config.DIRTY_SUBMIT_FRAME_BINDINGS),this.distorter_.updateDeviceInfo(this.deviceInfo_)),this.cardboardUI_&&this.cardboardUI_.listen(function(e){this.viewerSelector_.show(this.layer_.source.parentElement),e.stopPropagation(),e.preventDefault()}.bind(this),function(e){this.exitPresent(),e.stopPropagation(),e.preventDefault()}.bind(this)),this.rotateInstructions_&&(x()&&D()?this.rotateInstructions_.showTemporarily(3e3,this.layer_.source.parentElement):this.rotateInstructions_.update()),this.orientationHandler=this.onOrientationChange_.bind(this),window.addEventListener("orientationchange",this.orientationHandler),this.vrdisplaypresentchangeHandler=this.updateBounds_.bind(this),window.addEventListener("vrdisplaypresentchange",this.vrdisplaypresentchangeHandler),this.fireVRDisplayDeviceParamsChange_())},Je.prototype.endPresent_=function(){this.distorter_&&(this.distorter_.destroy(),this.distorter_=null),this.cardboardUI_&&(this.cardboardUI_.destroy(),this.cardboardUI_=null),this.rotateInstructions_&&this.rotateInstructions_.hide(),this.viewerSelector_.hide(),window.removeEventListener("orientationchange",this.orientationHandler),window.removeEventListener("vrdisplaypresentchange",this.vrdisplaypresentchangeHandler)},Je.prototype.updatePresent_=function(){this.endPresent_(),this.beginPresent_()},Je.prototype.submitFrame=function(e){if(this.distorter_)this.updateBounds_(),this.distorter_.submitFrame();else if(this.cardboardUI_&&this.layer_){var t=this.layer_.source.getContext("webgl");t||(t=this.layer_.source.getContext("experimental-webgl")),t||(t=this.layer_.source.getContext("webgl2"));var i=t.canvas;i.width==this.lastWidth&&i.height==this.lastHeight||this.cardboardUI_.onResize(),this.lastWidth=i.width,this.lastHeight=i.height,this.cardboardUI_.render()}},Je.prototype.onOrientationChange_=function(e){this.viewerSelector_.hide(),this.rotateInstructions_&&this.rotateInstructions_.update(),this.onResize_()},Je.prototype.onResize_=function(e){if(this.layer_){var t=this.layer_.source.getContext("webgl");t||(t=this.layer_.source.getContext("experimental-webgl")),t||(t=this.layer_.source.getContext("webgl2"));var i=["position: absolute","top: 0","left: 0","width: 100vw","height: 100vh","border: 0","margin: 0","padding: 0px","box-sizing: content-box"];t.canvas.setAttribute("style",i.join("; ")+";"),L(t.canvas)}},Je.prototype.onViewerChanged_=function(e){this.deviceInfo_.setViewer(e),this.distorter_&&this.distorter_.updateDeviceInfo(this.deviceInfo_),this.fireVRDisplayDeviceParamsChange_()},Je.prototype.fireVRDisplayDeviceParamsChange_=function(){var e=new CustomEvent("vrdisplaydeviceparamschange",{detail:{vrdisplay:this,deviceInfo:this.deviceInfo_}});window.dispatchEvent(e)},Je.VRFrameData=je,Je.VRDisplay=Ze,Je}()},Pe(Ce={exports:{}},Ce.exports),Ce.exports),Ie=(Be=De)&&Be.__esModule&&Object.prototype.hasOwnProperty.call(Be,"default")?Be.default:Be;class Le extends a{constructor(e){super(),this.global=e,this.onWindowResize=this.onWindowResize.bind(this),this.global.window.addEventListener("resize",this.onWindowResize),this.environmentBlendMode="opaque"}onBaseLayerSet(e,t){throw new Error("Not implemented")}isSessionSupported(e){throw new Error("Not implemented")}isFeatureSupported(e){throw new Error("Not implemented")}async requestSession(e,t){throw new Error("Not implemented")}requestAnimationFrame(e){throw new Error("Not implemented")}onFrameStart(e){throw new Error("Not implemented")}onFrameEnd(e){throw new Error("Not implemented")}doesSessionSupportReferenceSpace(e,t){throw new Error("Not implemented")}requestStageBounds(){throw new Error("Not implemented")}async requestFrameOfReferenceTransform(e,t){}cancelAnimationFrame(e){throw new Error("Not implemented")}endSession(e){throw new Error("Not implemented")}getViewport(e,t,i,r){throw new Error("Not implemented")}getProjectionMatrix(e){throw new Error("Not implemented")}getBasePoseMatrix(){throw new Error("Not implemented")}getBaseViewMatrix(e){throw new Error("Not implemented")}getInputSources(){throw new Error("Not implemented")}getInputPose(e,t,i){throw new Error("Not implemented")}onWindowResize(){this.onWindowResize()}}let Oe={mapping:"xr-standard",profiles:["oculus-go","generic-trigger-touchpad"],buttons:{length:3,0:1,1:null,2:0},gripTransform:{orientation:[.11*Math.PI,0,0,1]}},Ne={mapping:"xr-standard",displayProfiles:{"Oculus Quest":["oculus-touch-v2","oculus-touch","generic-trigger-squeeze-thumbstick"]},profiles:["oculus-touch","generic-trigger-squeeze-thumbstick"],axes:{length:4,0:null,1:null,2:0,3:1},buttons:{length:7,0:1,1:2,2:null,3:0,4:3,5:4,6:null},gripTransform:{position:[0,-.02,.04,1],orientation:[.11*Math.PI,0,0,1]}},Ge={mapping:"xr-standard",profiles:["htc-vive","generic-trigger-squeeze-touchpad"],displayProfiles:{"HTC Vive":["htc-vive","generic-trigger-squeeze-touchpad"],"HTC Vive DVT":["htc-vive","generic-trigger-squeeze-touchpad"],"Valve Index":["valve-index","generic-trigger-squeeze-touchpad-thumbstick"]},buttons:{length:3,0:1,1:2,2:0},gripTransform:{position:[0,0,.05,1]},targetRayTransform:{orientation:[-.08*Math.PI,0,0,1]},userAgentOverrides:{Firefox:{axes:{invert:[1,3]}}}},Ve={mapping:"xr-standard",profiles:["samsung-gearvr","generic-trigger-touchpad"],buttons:{length:3,0:1,1:null,2:0},gripTransform:{orientation:[.11*Math.PI,0,0,1]}},ke={mapping:"xr-standard",profiles:["samsung-odyssey","microsoft-mixed-reality","generic-trigger-squeeze-touchpad-thumbstick"],buttons:{length:4,0:1,1:0,2:2,3:4},gripTransform:{position:[0,-.02,.04,1],orientation:[.11*Math.PI,0,0,1]}},ze={mapping:"xr-standard",profiles:["microsoft-mixed-reality","generic-trigger-squeeze-touchpad-thumbstick"],buttons:{length:4,0:1,1:0,2:2,3:4},gripTransform:{position:[0,-.02,.04,1],orientation:[.11*Math.PI,0,0,1]}},Qe={"Daydream Controller":{mapping:"",profiles:["google-daydream","generic-trigger-touchpad"],buttons:{length:3,0:null,1:null,2:0}},"Gear VR Controller":Ve,"HTC Vive Focus Controller":{mapping:"xr-standard",profiles:["htc-vive-focus","generic-trigger-touchpad"],buttons:{length:3,0:1,1:null,2:0}},"Oculus Go Controller":Oe,"Oculus Touch (Right)":Ne,"Oculus Touch (Left)":Ne,"OpenVR Gamepad":Ge,"Spatial Controller (Spatial Interaction Source) 045E-065A":ze,"Spatial Controller (Spatial Interaction Source) 045E-065D":ke,"Windows Mixed Reality (Right)":ze,"Windows Mixed Reality (Left)":ze};const Ue=v(.155,-.465,-.15),Xe=v(-.155,-.465,-.15),He=v(0,0,-.25),We=v(0,0,.05),qe=v(-.08,.14,.08),je=180/Math.PI;class Ye{constructor(){this.hand="right",this.headElbowOffset=Ue,this.controllerQ=R(),this.lastControllerQ=R(),this.headQ=R(),this.headPos=m(),this.elbowPos=m(),this.wristPos=m(),this.time=null,this.lastTime=null,this.rootQ=R(),this.position=m()}setHandedness(e){this.hand!=e&&(this.hand=e,"left"==this.hand?this.headElbowOffset=Xe:this.headElbowOffset=Ue)}update(e,t){this.time=W(),e&&(D(this.lastControllerQ,this.controllerQ),D(this.controllerQ,e)),t&&(A(this.headPos,t),p(this.headQ,t));let i=this.getHeadYawOrientation_(),r=this.quatAngle_(this.lastControllerQ,this.controllerQ);r/((this.time-this.lastTime)/1e3)>.61?T(this.rootQ,this.rootQ,i,Math.min(r/.175,1)):D(this.rootQ,i);let n=v(0,0,-1);S(n,n,this.controllerQ);let s=x(n,[0,1,0]),a=this.clamp_((s-.12)/.87,0,1),o=C(this.rootQ);P(o,o),F(o,o,this.controllerQ);let l=this.elbowPos;w(l,this.headPos),y(l,l,this.headElbowOffset);let c=g(qe);b(c,c,a),y(l,l,c);let h=this.quatAngle_(o,R())*je,u=(1-Math.pow(h/180,4))*(.4+.6*a*.4),d=R();T(d,d,o,u);let f=P(R(),d),m=C(o);F(m,m,f);let E=this.wristPos;w(E,We),S(E,E,d),y(E,E,He),S(E,E,m),y(E,E,l);let M=g(qe);b(M,M,a),y(this.position,this.wristPos,M),S(this.position,this.position,this.rootQ),this.lastTime=this.time}getPosition(){return this.position}getHeadYawOrientation_(){let e=m();!function(e,t,i){function r(e,t,i){return e<t?t:e>i?i:e}var n=t[0]*t[0],s=t[1]*t[1],a=t[2]*t[2],o=t[3]*t[3];if("XYZ"===i)e[0]=Math.atan2(2*(t[0]*t[3]-t[1]*t[2]),o-n-s+a),e[1]=Math.asin(r(2*(t[0]*t[2]+t[1]*t[3]),-1,1)),e[2]=Math.atan2(2*(t[2]*t[3]-t[0]*t[1]),o+n-s-a);else if("YXZ"===i)e[0]=Math.asin(r(2*(t[0]*t[3]-t[1]*t[2]),-1,1)),e[1]=Math.atan2(2*(t[0]*t[2]+t[1]*t[3]),o-n-s+a),e[2]=Math.atan2(2*(t[0]*t[1]+t[2]*t[3]),o-n+s-a);else if("ZXY"===i)e[0]=Math.asin(r(2*(t[0]*t[3]+t[1]*t[2]),-1,1)),e[1]=Math.atan2(2*(t[1]*t[3]-t[2]*t[0]),o-n-s+a),e[2]=Math.atan2(2*(t[2]*t[3]-t[0]*t[1]),o-n+s-a);else if("ZYX"===i)e[0]=Math.atan2(2*(t[0]*t[3]+t[2]*t[1]),o-n-s+a),e[1]=Math.asin(r(2*(t[1]*t[3]-t[0]*t[2]),-1,1)),e[2]=Math.atan2(2*(t[0]*t[1]+t[2]*t[3]),o+n-s-a);else if("YZX"===i)e[0]=Math.atan2(2*(t[0]*t[3]-t[2]*t[1]),o-n+s-a),e[1]=Math.atan2(2*(t[1]*t[3]-t[0]*t[2]),o+n-s-a),e[2]=Math.asin(r(2*(t[0]*t[1]+t[2]*t[3]),-1,1));else{if("XZY"!==i)return void console.log("No order given for quaternion to euler conversion.");e[0]=Math.atan2(2*(t[0]*t[3]+t[1]*t[2]),o-n+s-a),e[1]=Math.atan2(2*(t[0]*t[2]+t[1]*t[3]),o+n-s-a),e[2]=Math.asin(r(2*(t[2]*t[3]-t[0]*t[1]),-1,1))}}(e,this.headQ,"YXZ");let t=function(e,t,i,r){let n=.5*Math.PI/180;t*=n,i*=n,r*=n;let s=Math.sin(t),a=Math.cos(t),o=Math.sin(i),l=Math.cos(i),c=Math.sin(r),h=Math.cos(r);return e[0]=s*l*h-a*o*c,e[1]=a*o*h+s*l*c,e[2]=a*l*c-s*o*h,e[3]=a*l*h+s*o*c,e}(R(),0,e[1]*je,0);return t}clamp_(e,t,i){return Math.min(Math.max(e,t),i)}quatAngle_(e,t){let i=[0,0,-1],r=[0,0,-1];return S(i,i,e),S(r,r,t),function(e,t){let i=v(e[0],e[1],e[2]),r=v(t[0],t[1],t[2]);E(i,i),E(r,r);let n=x(i,r);return n>1?0:n<-1?Math.PI:Math.acos(n)}(i,r)}}const Ze=Symbol("@@webxr-polyfill/XRRemappedGamepad"),$e={pressed:!1,touched:!1,value:0};Object.freeze($e);class Ke{constructor(e,t,i){if(i||(i={}),i.userAgentOverrides)for(let e in i.userAgentOverrides)if(navigator.userAgent.includes(e)){let t=i.userAgentOverrides[e];for(let e in t)e in i?Object.assign(i[e],t[e]):i[e]=t[e];break}let r=new Array(i.axes&&i.axes.length?i.axes.length:e.axes.length),n=new Array(i.buttons&&i.buttons.length?i.buttons.length:e.buttons.length),s=null;if(i.gripTransform){let e=i.gripTransform.orientation||[0,0,0,1];s=l(),d(s,I(e,e),i.gripTransform.position||[0,0,0])}let a=null;if(i.targetRayTransform){let e=i.targetRayTransform.orientation||[0,0,0,1];a=l(),d(a,I(e,e),i.targetRayTransform.position||[0,0,0])}let o=i.profiles;i.displayProfiles&&t.displayName in i.displayProfiles&&(o=i.displayProfiles[t.displayName]),this[Ze]={gamepad:e,map:i,profiles:o||[e.id],mapping:i.mapping||e.mapping,axes:r,buttons:n,gripTransform:s,targetRayTransform:a},this._update()}_update(){let e=this[Ze].gamepad,t=this[Ze].map,i=this[Ze].axes;for(let r=0;r<i.length;++r)t.axes&&r in t.axes?null===t.axes[r]?i[r]=0:i[r]=e.axes[t.axes[r]]:i[r]=e.axes[r];if(t.axes&&t.axes.invert)for(let e of t.axes.invert)e<i.length&&(i[e]*=-1);let r=this[Ze].buttons;for(let i=0;i<r.length;++i)t.buttons&&i in t.buttons?null===t.buttons[i]?r[i]=$e:r[i]=e.buttons[t.buttons[i]]:r[i]=e.buttons[i]}get id(){return""}get _profiles(){return this[Ze].profiles}get index(){return-1}get connected(){return this[Ze].gamepad.connected}get timestamp(){return this[Ze].gamepad.timestamp}get mapping(){return this[Ze].mapping}get axes(){return this[Ze].axes}get buttons(){return this[Ze].buttons}get hapticActuators(){return this[Ze].gamepad.hapticActuators}}class Je{constructor(e,t,i=0,r=-1){this.polyfill=e,this.display=t,this.nativeGamepad=null,this.gamepad=null,this.inputSource=new xe(this),this.lastPosition=m(),this.emulatedPosition=!1,this.basePoseMatrix=l(),this.outputMatrix=l(),this.primaryButtonIndex=i,this.primaryActionPressed=!1,this.primarySqueezeButtonIndex=r,this.primarySqueezeActionPressed=!1,this.handedness="",this.targetRayMode="gaze",this.armModel=null}get profiles(){return this.gamepad?this.gamepad._profiles:[]}updateFromGamepad(e){this.nativeGamepad!==e&&(this.nativeGamepad=e,this.gamepad=e?new Ke(e,this.display,Qe[e.id]):null),this.handedness=""===e.hand?"none":e.hand,this.gamepad&&this.gamepad._update(),e.pose?(this.targetRayMode="tracked-pointer",this.emulatedPosition=!e.pose.hasPosition):""===e.hand&&(this.targetRayMode="gaze",this.emulatedPosition=!1)}updateBasePoseMatrix(){if(this.nativeGamepad&&this.nativeGamepad.pose){let e=this.nativeGamepad.pose,t=e.position,i=e.orientation;if(!t&&!i)return;t?(this.lastPosition[0]=t[0],this.lastPosition[1]=t[1],this.lastPosition[2]=t[2]):e.hasPosition?t=this.lastPosition:(this.armModel||(this.armModel=new Ye),this.armModel.setHandedness(this.nativeGamepad.hand),this.armModel.update(i,this.polyfill.getBasePoseMatrix()),t=this.armModel.getPosition()),d(this.basePoseMatrix,i,t)}else!function(e,t){e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]}(this.basePoseMatrix,this.polyfill.getBasePoseMatrix());return this.basePoseMatrix}getXRPose(e,t){switch(this.updateBasePoseMatrix(),t){case"target-ray":e._transformBasePoseMatrix(this.outputMatrix,this.basePoseMatrix),this.gamepad&&this.gamepad[Ze].targetRayTransform&&u(this.outputMatrix,this.outputMatrix,this.gamepad[Ze].targetRayTransform);break;case"grip":if(!this.nativeGamepad||!this.nativeGamepad.pose)return null;e._transformBasePoseMatrix(this.outputMatrix,this.basePoseMatrix),this.gamepad&&this.gamepad[Ze].gripTransform&&u(this.outputMatrix,this.outputMatrix,this.gamepad[Ze].gripTransform);break;default:return null}return e._adjustForOriginOffset(this.outputMatrix),new XRPose(new XRRigidTransform(this.outputMatrix),this.emulatedPosition)}}const et={highRefreshRate:!0},tt={oculus:1,openvr:1,"spatial controller (spatial interaction source)":1};let it=0;class rt{constructor(e,t,i={}){if(this.mode=e,this.enabledFeatures=t,this.outputContext=null,this.immersive="immersive-vr"==e||"immersive-ar"==e,this.ended=null,this.baseLayer=null,this.id=++it,this.modifiedCanvasLayer=!1,this.outputContext){const e=i.renderContextType||"2d";this.renderContext=this.outputContext.canvas.getContext(e)}}}class nt extends Le{constructor(e,t){const{canPresent:i}=t.capabilities;super(e),this.display=t,this.frame=new e.VRFrameData,this.sessions=new Map,this.immersiveSession=null,this.canPresent=i,this.baseModelMatrix=l(),this.gamepadInputSources={},this.tempVec3=new Float32Array(3),this.onVRDisplayPresentChange=this.onVRDisplayPresentChange.bind(this),e.window.addEventListener("vrdisplaypresentchange",this.onVRDisplayPresentChange),this.CAN_USE_GAMEPAD=e.navigator&&"getGamepads"in e.navigator,this.HAS_BITMAP_SUPPORT=(e=>!(!e.ImageBitmapRenderingContext||!e.createImageBitmap))(e)}get depthNear(){return this.display.depthNear}set depthNear(e){this.display.depthNear=e}get depthFar(){return this.display.depthFar}set depthFar(e){this.display.depthFar=e}onBaseLayerSet(e,t){const i=this.sessions.get(e),r=t.context.canvas;if(i.immersive){const e=this.display.getEyeParameters("left"),n=this.display.getEyeParameters("right");r.width=2*Math.max(e.renderWidth,n.renderWidth),r.height=Math.max(e.renderHeight,n.renderHeight),this.display.requestPresent([{source:r,attributes:et}]).then((()=>{this.global.document.body.contains(r)||(i.modifiedCanvasLayer=!0,this.global.document.body.appendChild(r),(e=>{e.style.display="block",e.style.position="absolute",e.style.width=e.style.height="1px",e.style.top=e.style.left="0px"})(r)),i.baseLayer=t}))}else i.baseLayer=t}isSessionSupported(e){return"immersive-ar"!=e&&("immersive-vr"!=e||!1!==this.canPresent)}isFeatureSupported(e){switch(e){case"viewer":case"local":case"local-floor":return!0;default:return!1}}async requestSession(e,t){if(!this.isSessionSupported(e))return Promise.reject();let i="immersive-vr"==e;if(i){const e=this.global.document.createElement("canvas");e.getContext("webgl");await this.display.requestPresent([{source:e,attributes:et}])}const r=new rt(e,t,{renderContextType:this.HAS_BITMAP_SUPPORT?"bitmaprenderer":"2d"});return this.sessions.set(r.id,r),i&&(this.immersiveSession=r,this.dispatchEvent("@@webxr-polyfill/vr-present-start",r.id)),Promise.resolve(r.id)}requestAnimationFrame(e){return this.display.requestAnimationFrame(e)}getPrimaryButtonIndex(e){let t=0,i=e.id.toLowerCase();for(let e in tt)if(i.includes(e)){t=tt[e];break}return Math.min(t,e.buttons.length-1)}onFrameStart(e,t){this.display.depthNear=t.depthNear,this.display.depthFar=t.depthFar,this.display.getFrameData(this.frame);const i=this.sessions.get(e);if(i.immersive&&this.CAN_USE_GAMEPAD){let e=this.gamepadInputSources;this.gamepadInputSources={};let t=this.global.navigator.getGamepads();for(let r=0;r<t.length;++r){let n=t[r];if(n&&n.displayId>0){let t=e[r];if(t||(t=new Je(this,this.display,this.getPrimaryButtonIndex(n))),t.updateFromGamepad(n),this.gamepadInputSources[r]=t,-1!=t.primaryButtonIndex){let e=n.buttons[t.primaryButtonIndex].pressed;e&&!t.primaryActionPressed?this.dispatchEvent("@@webxr-polyfill/input-select-start",{sessionId:i.id,inputSource:t.inputSource}):!e&&t.primaryActionPressed&&this.dispatchEvent("@@webxr-polyfill/input-select-end",{sessionId:i.id,inputSource:t.inputSource}),t.primaryActionPressed=e}if(-1!=t.primarySqueezeButtonIndex){let e=n.buttons[t.primarySqueezeButtonIndex].pressed;e&&!t.primarySqueezeActionPressed?this.dispatchEvent("@@webxr-polyfill/input-squeeze-start",{sessionId:i.id,inputSource:t.inputSource}):!e&&t.primarySqueezeActionPressed&&this.dispatchEvent("@@webxr-polyfill/input-squeeze-end",{sessionId:i.id,inputSource:t.inputSource}),t.primarySqueezeActionPressed=e}}}}if(!i.immersive&&i.baseLayer){const e=i.baseLayer.context.canvas;f(this.frame.leftProjectionMatrix,t.inlineVerticalFieldOfView,e.width/e.height,t.depthNear,t.depthFar)}}onFrameEnd(e){const t=this.sessions.get(e);if(!t.ended&&t.baseLayer){if(t.outputContext&&(!t.immersive||this.display.capabilities.hasExternalDisplay)){const e=t.immersive&&this.display.capabilities.hasExternalDisplay,i=t.baseLayer.context.canvas,r=e?i.width/2:i.width,n=i.height;{const e=t.outputContext.canvas,s=e.width,a=e.height,o=t.renderContext;this.HAS_BITMAP_SUPPORT?i.transferToImageBitmap?o.transferFromImageBitmap(i.transferToImageBitmap()):this.global.createImageBitmap(i,0,0,r,n,{resizeWidth:s,resizeHeight:a}).then((e=>o.transferFromImageBitmap(e))):o.drawImage(i,0,0,r,n,0,0,s,a)}}t.immersive&&t.baseLayer&&this.display.submitFrame()}}cancelAnimationFrame(e){this.display.cancelAnimationFrame(e)}async endSession(e){const t=this.sessions.get(e);if(!t.ended)return t.immersive?this.display.exitPresent():void(t.ended=!0)}doesSessionSupportReferenceSpace(e,t){const i=this.sessions.get(e);return!i.ended&&i.enabledFeatures.has(t)}requestStageBounds(){if(this.display.stageParameters){const e=this.display.stageParameters.sizeX,t=this.display.stageParameters.sizeZ,i=[];return i.push(-e/2),i.push(-t/2),i.push(e/2),i.push(-t/2),i.push(e/2),i.push(t/2),i.push(-e/2),i.push(t/2),i}return null}async requestFrameOfReferenceTransform(e,t){return("local-floor"===e||"bounded-floor"===e)&&this.display.stageParameters&&this.display.stageParameters.sittingToStandingTransform?this.display.stageParameters.sittingToStandingTransform:null}getProjectionMatrix(e){if("left"===e)return this.frame.leftProjectionMatrix;if("right"===e)return this.frame.rightProjectionMatrix;if("none"===e)return this.frame.leftProjectionMatrix;throw new Error("eye must be of type 'left' or 'right'")}getViewport(e,t,i,r){const n=this.sessions.get(e),{width:s,height:a}=i.context.canvas;if(!n.immersive)return r.x=r.y=0,r.width=s,r.height=a,!0;if("left"===t||"none"===t)r.x=0;else{if("right"!==t)return!1;r.x=s/2}return r.y=0,r.width=s/2,r.height=a,!0}getBasePoseMatrix(){let{position:e,orientation:t}=this.frame.pose;return e||t?(e||(e=this.tempVec3,e[0]=e[1]=e[2]=0),d(this.baseModelMatrix,t,e),this.baseModelMatrix):this.baseModelMatrix}getBaseViewMatrix(e){if("left"===e||"none"===e)return this.frame.leftViewMatrix;if("right"===e)return this.frame.rightViewMatrix;throw new Error("eye must be of type 'left' or 'right'")}getInputSources(){let e=[];for(let t in this.gamepadInputSources)e.push(this.gamepadInputSources[t].inputSource);return e}getInputPose(e,t,i){if(!t)return null;for(let r in this.gamepadInputSources){let n=this.gamepadInputSources[r];if(n.inputSource===e)return n.getXRPose(t,i)}return null}onWindowResize(){}onVRDisplayPresentChange(e){this.display.isPresenting||this.sessions.forEach((e=>{if(e.immersive&&!e.ended){if(e.modifiedCanvasLayer){const t=e.baseLayer.context.canvas;document.body.removeChild(t),t.setAttribute("style","")}this.immersiveSession===e&&(this.immersiveSession=null),this.dispatchEvent("@@webxr-polyfill/vr-present-end",e.id)}}))}}class st extends nt{constructor(e,t){const i=new Ie(t||{});super(e,i),this.display=i,this.frame={rightViewMatrix:new Float32Array(16),leftViewMatrix:new Float32Array(16),rightProjectionMatrix:new Float32Array(16),leftProjectionMatrix:new Float32Array(16),pose:null,timestamp:null}}}let at=0;class ot{constructor(e,t){this.mode=e,this.enabledFeatures=t,this.ended=null,this.baseLayer=null,this.id=++at}}class lt extends Le{constructor(e){super(e),this.sessions=new Map,this.projectionMatrix=l(),this.identityMatrix=l()}onBaseLayerSet(e,t){this.sessions.get(e).baseLayer=t}isSessionSupported(e){return"inline"==e}isFeatureSupported(e){return"viewer"===e}async requestSession(e,t){if(!this.isSessionSupported(e))return Promise.reject();const i=new ot(e,t);return this.sessions.set(i.id,i),Promise.resolve(i.id)}requestAnimationFrame(e){return window.requestAnimationFrame(e)}cancelAnimationFrame(e){window.cancelAnimationFrame(e)}onFrameStart(e,t){const i=this.sessions.get(e);if(i.baseLayer){const e=i.baseLayer.context.canvas;f(this.projectionMatrix,t.inlineVerticalFieldOfView,e.width/e.height,t.depthNear,t.depthFar)}}onFrameEnd(e){}async endSession(e){this.sessions.get(e).ended=!0}doesSessionSupportReferenceSpace(e,t){const i=this.sessions.get(e);return!i.ended&&i.enabledFeatures.has(t)}requestStageBounds(){return null}async requestFrameOfReferenceTransform(e,t){return null}getProjectionMatrix(e){return this.projectionMatrix}getViewport(e,t,i,r){this.sessions.get(e);const{width:n,height:s}=i.context.canvas;return r.x=r.y=0,r.width=n,r.height=s,!0}getBasePoseMatrix(){return this.identityMatrix}getBaseViewMatrix(e){return this.identityMatrix}getInputSources(){return[]}getInputPose(e,t,i){return null}onWindowResize(){}}const ct=async function(e,t){if(t.webvr){let t=await async function(e){let t=null;if("getVRDisplays"in e.navigator)try{const i=await e.navigator.getVRDisplays();i&&i.length&&(t=new nt(e,i[0]))}catch(e){}return t}(e);if(t)return t}let i=(e=>{var t=!1;return function(e){(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(e.substr(0,4)))&&(t=!0)}(e.navigator.userAgent||e.navigator.vendor||e.opera),t})(e);return i&&t.cardboard||!i&&t.allowCardboardOnDesktop?(e.VRFrameData||(e.VRFrameData=function(){this.rightViewMatrix=new Float32Array(16),this.leftViewMatrix=new Float32Array(16),this.rightProjectionMatrix=new Float32Array(16),this.leftProjectionMatrix=new Float32Array(16),this.pose=null}),new st(e,t.cardboardConfig)):new lt(e)},ht={global:n,webvr:!0,cardboard:!0,cardboardConfig:null,allowCardboardOnDesktop:!1},ut=["navigator","HTMLCanvasElement","WebGLRenderingContext"];var dt=class{constructor(e={}){this.config=Object.freeze(Object.assign({},ht,e)),this.global=this.config.global,this.nativeWebXR="xr"in this.global.navigator,this.injected=!1,this.nativeWebXR?this._injectCompatibilityShims(this.global):this._injectPolyfill(this.global)}_injectPolyfill(e){if(!ut.every((t=>!!e[t])))throw new Error(`Global must have the following attributes : ${ut}`);for(const t of Object.keys(_e))void 0!==e[t]?console.warn(`${t} already defined on global.`):e[t]=_e[t];Re(e.WebGLRenderingContext)&&(Fe(e.HTMLCanvasElement),e.OffscreenCanvas&&Fe(e.OffscreenCanvas),e.WebGL2RenderingContext&&Re(e.WebGL2RenderingContext),window.isSecureContext||console.warn("WebXR Polyfill Warning:\nThis page is not running in a secure context (https:// or localhost)!\nThis means that although the page may be able to use the WebXR Polyfill it will\nnot be able to use native WebXR implementations, and as such will not be able to\naccess dedicated VR or AR hardware, and will not be able to take advantage of\nany performance improvements a native WebXR implementation may offer. Please\nhost this content on a secure origin for the best user experience.\n"));this.injected=!0,this._patchNavigatorXR()}_patchNavigatorXR(){let e=ct(this.global,this.config);this.xr=new _e.XRSystem(e),Object.defineProperty(this.global.navigator,"xr",{value:this.xr,configurable:!0})}_injectCompatibilityShims(e){if(!ut.every((t=>!!e[t])))throw new Error(`Global must have the following attributes : ${ut}`);if(e.navigator.xr&&"supportsSession"in e.navigator.xr&&!("isSessionSupported"in e.navigator.xr)){let t=e.navigator.xr.supportsSession;e.navigator.xr.isSessionSupported=function(e){return t.call(this,e).then((()=>!0)).catch((()=>!1))},e.navigator.xr.supportsSession=function(e){return console.warn("navigator.xr.supportsSession() is deprecated. Please call navigator.xr.isSessionSupported() instead and check the boolean value returned when the promise resolves."),t.call(this,e)}}}},At=on(r),pt={};Object.defineProperty(pt,"__esModule",{value:!0});var ft={};t(ft,"create",(()=>wt)),t(ft,"fromMat4",(()=>yt)),t(ft,"clone",(()=>bt)),t(ft,"copy",(()=>Et)),t(ft,"fromValues",(()=>xt)),t(ft,"set",(()=>Mt)),t(ft,"identity",(()=>St)),t(ft,"transpose",(()=>_t)),t(ft,"invert",(()=>Rt)),t(ft,"adjoint",(()=>Ft)),t(ft,"determinant",(()=>Tt)),t(ft,"multiply",(()=>Pt)),t(ft,"translate",(()=>Ct)),t(ft,"rotate",(()=>Bt)),t(ft,"scale",(()=>Dt)),t(ft,"fromTranslation",(()=>It)),t(ft,"fromRotation",(()=>Lt)),t(ft,"fromScaling",(()=>Ot)),t(ft,"fromMat2d",(()=>Nt)),t(ft,"fromQuat",(()=>Gt)),t(ft,"normalFromMat4",(()=>Vt)),t(ft,"projection",(()=>kt)),t(ft,"str",(()=>zt)),t(ft,"frob",(()=>Qt)),t(ft,"add",(()=>Ut)),t(ft,"subtract",(()=>Xt)),t(ft,"multiplyScalar",(()=>Ht)),t(ft,"multiplyScalarAndAdd",(()=>Wt)),t(ft,"exactEquals",(()=>qt)),t(ft,"equals",(()=>jt)),t(ft,"mul",(()=>Yt)),t(ft,"sub",(()=>Zt));var mt=1e-6,gt="undefined"!=typeof Float32Array?Float32Array:Array,vt=Math.random;Math.PI;function wt(){var e=new gt(9);return gt!=Float32Array&&(e[1]=0,e[2]=0,e[3]=0,e[5]=0,e[6]=0,e[7]=0),e[0]=1,e[4]=1,e[8]=1,e}function yt(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[4],e[4]=t[5],e[5]=t[6],e[6]=t[8],e[7]=t[9],e[8]=t[10],e}function bt(e){var t=new gt(9);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t}function Et(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e}function xt(e,t,i,r,n,s,a,o,l){var c=new gt(9);return c[0]=e,c[1]=t,c[2]=i,c[3]=r,c[4]=n,c[5]=s,c[6]=a,c[7]=o,c[8]=l,c}function Mt(e,t,i,r,n,s,a,o,l,c){return e[0]=t,e[1]=i,e[2]=r,e[3]=n,e[4]=s,e[5]=a,e[6]=o,e[7]=l,e[8]=c,e}function St(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=1,e[5]=0,e[6]=0,e[7]=0,e[8]=1,e}function _t(e,t){if(e===t){var i=t[1],r=t[2],n=t[5];e[1]=t[3],e[2]=t[6],e[3]=i,e[5]=t[7],e[6]=r,e[7]=n}else e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8];return e}function Rt(e,t){var i=t[0],r=t[1],n=t[2],s=t[3],a=t[4],o=t[5],l=t[6],c=t[7],h=t[8],u=h*a-o*c,d=-h*s+o*l,A=c*s-a*l,p=i*u+r*d+n*A;return p?(p=1/p,e[0]=u*p,e[1]=(-h*r+n*c)*p,e[2]=(o*r-n*a)*p,e[3]=d*p,e[4]=(h*i-n*l)*p,e[5]=(-o*i+n*s)*p,e[6]=A*p,e[7]=(-c*i+r*l)*p,e[8]=(a*i-r*s)*p,e):null}function Ft(e,t){var i=t[0],r=t[1],n=t[2],s=t[3],a=t[4],o=t[5],l=t[6],c=t[7],h=t[8];return e[0]=a*h-o*c,e[1]=n*c-r*h,e[2]=r*o-n*a,e[3]=o*l-s*h,e[4]=i*h-n*l,e[5]=n*s-i*o,e[6]=s*c-a*l,e[7]=r*l-i*c,e[8]=i*a-r*s,e}function Tt(e){var t=e[0],i=e[1],r=e[2],n=e[3],s=e[4],a=e[5],o=e[6],l=e[7],c=e[8];return t*(c*s-a*l)+i*(-c*n+a*o)+r*(l*n-s*o)}function Pt(e,t,i){var r=t[0],n=t[1],s=t[2],a=t[3],o=t[4],l=t[5],c=t[6],h=t[7],u=t[8],d=i[0],A=i[1],p=i[2],f=i[3],m=i[4],g=i[5],v=i[6],w=i[7],y=i[8];return e[0]=d*r+A*a+p*c,e[1]=d*n+A*o+p*h,e[2]=d*s+A*l+p*u,e[3]=f*r+m*a+g*c,e[4]=f*n+m*o+g*h,e[5]=f*s+m*l+g*u,e[6]=v*r+w*a+y*c,e[7]=v*n+w*o+y*h,e[8]=v*s+w*l+y*u,e}function Ct(e,t,i){var r=t[0],n=t[1],s=t[2],a=t[3],o=t[4],l=t[5],c=t[6],h=t[7],u=t[8],d=i[0],A=i[1];return e[0]=r,e[1]=n,e[2]=s,e[3]=a,e[4]=o,e[5]=l,e[6]=d*r+A*a+c,e[7]=d*n+A*o+h,e[8]=d*s+A*l+u,e}function Bt(e,t,i){var r=t[0],n=t[1],s=t[2],a=t[3],o=t[4],l=t[5],c=t[6],h=t[7],u=t[8],d=Math.sin(i),A=Math.cos(i);return e[0]=A*r+d*a,e[1]=A*n+d*o,e[2]=A*s+d*l,e[3]=A*a-d*r,e[4]=A*o-d*n,e[5]=A*l-d*s,e[6]=c,e[7]=h,e[8]=u,e}function Dt(e,t,i){var r=i[0],n=i[1];return e[0]=r*t[0],e[1]=r*t[1],e[2]=r*t[2],e[3]=n*t[3],e[4]=n*t[4],e[5]=n*t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e}function It(e,t){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=1,e[5]=0,e[6]=t[0],e[7]=t[1],e[8]=1,e}function Lt(e,t){var i=Math.sin(t),r=Math.cos(t);return e[0]=r,e[1]=i,e[2]=0,e[3]=-i,e[4]=r,e[5]=0,e[6]=0,e[7]=0,e[8]=1,e}function Ot(e,t){return e[0]=t[0],e[1]=0,e[2]=0,e[3]=0,e[4]=t[1],e[5]=0,e[6]=0,e[7]=0,e[8]=1,e}function Nt(e,t){return e[0]=t[0],e[1]=t[1],e[2]=0,e[3]=t[2],e[4]=t[3],e[5]=0,e[6]=t[4],e[7]=t[5],e[8]=1,e}function Gt(e,t){var i=t[0],r=t[1],n=t[2],s=t[3],a=i+i,o=r+r,l=n+n,c=i*a,h=r*a,u=r*o,d=n*a,A=n*o,p=n*l,f=s*a,m=s*o,g=s*l;return e[0]=1-u-p,e[3]=h-g,e[6]=d+m,e[1]=h+g,e[4]=1-c-p,e[7]=A-f,e[2]=d-m,e[5]=A+f,e[8]=1-c-u,e}function Vt(e,t){var i=t[0],r=t[1],n=t[2],s=t[3],a=t[4],o=t[5],l=t[6],c=t[7],h=t[8],u=t[9],d=t[10],A=t[11],p=t[12],f=t[13],m=t[14],g=t[15],v=i*o-r*a,w=i*l-n*a,y=i*c-s*a,b=r*l-n*o,E=r*c-s*o,x=n*c-s*l,M=h*f-u*p,S=h*m-d*p,_=h*g-A*p,R=u*m-d*f,F=u*g-A*f,T=d*g-A*m,P=v*T-w*F+y*R+b*_-E*S+x*M;return P?(P=1/P,e[0]=(o*T-l*F+c*R)*P,e[1]=(l*_-a*T-c*S)*P,e[2]=(a*F-o*_+c*M)*P,e[3]=(n*F-r*T-s*R)*P,e[4]=(i*T-n*_+s*S)*P,e[5]=(r*_-i*F-s*M)*P,e[6]=(f*x-m*E+g*b)*P,e[7]=(m*y-p*x-g*w)*P,e[8]=(p*E-f*y+g*v)*P,e):null}function kt(e,t,i){return e[0]=2/t,e[1]=0,e[2]=0,e[3]=0,e[4]=-2/i,e[5]=0,e[6]=-1,e[7]=1,e[8]=1,e}function zt(e){return"mat3("+e[0]+", "+e[1]+", "+e[2]+", "+e[3]+", "+e[4]+", "+e[5]+", "+e[6]+", "+e[7]+", "+e[8]+")"}function Qt(e){return Math.hypot(e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7],e[8])}function Ut(e,t,i){return e[0]=t[0]+i[0],e[1]=t[1]+i[1],e[2]=t[2]+i[2],e[3]=t[3]+i[3],e[4]=t[4]+i[4],e[5]=t[5]+i[5],e[6]=t[6]+i[6],e[7]=t[7]+i[7],e[8]=t[8]+i[8],e}function Xt(e,t,i){return e[0]=t[0]-i[0],e[1]=t[1]-i[1],e[2]=t[2]-i[2],e[3]=t[3]-i[3],e[4]=t[4]-i[4],e[5]=t[5]-i[5],e[6]=t[6]-i[6],e[7]=t[7]-i[7],e[8]=t[8]-i[8],e}function Ht(e,t,i){return e[0]=t[0]*i,e[1]=t[1]*i,e[2]=t[2]*i,e[3]=t[3]*i,e[4]=t[4]*i,e[5]=t[5]*i,e[6]=t[6]*i,e[7]=t[7]*i,e[8]=t[8]*i,e}function Wt(e,t,i,r){return e[0]=t[0]+i[0]*r,e[1]=t[1]+i[1]*r,e[2]=t[2]+i[2]*r,e[3]=t[3]+i[3]*r,e[4]=t[4]+i[4]*r,e[5]=t[5]+i[5]*r,e[6]=t[6]+i[6]*r,e[7]=t[7]+i[7]*r,e[8]=t[8]+i[8]*r,e}function qt(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]&&e[4]===t[4]&&e[5]===t[5]&&e[6]===t[6]&&e[7]===t[7]&&e[8]===t[8]}function jt(e,t){var i=e[0],r=e[1],n=e[2],s=e[3],a=e[4],o=e[5],l=e[6],c=e[7],h=e[8],u=t[0],d=t[1],A=t[2],p=t[3],f=t[4],m=t[5],g=t[6],v=t[7],w=t[8];return Math.abs(i-u)<=mt*Math.max(1,Math.abs(i),Math.abs(u))&&Math.abs(r-d)<=mt*Math.max(1,Math.abs(r),Math.abs(d))&&Math.abs(n-A)<=mt*Math.max(1,Math.abs(n),Math.abs(A))&&Math.abs(s-p)<=mt*Math.max(1,Math.abs(s),Math.abs(p))&&Math.abs(a-f)<=mt*Math.max(1,Math.abs(a),Math.abs(f))&&Math.abs(o-m)<=mt*Math.max(1,Math.abs(o),Math.abs(m))&&Math.abs(l-g)<=mt*Math.max(1,Math.abs(l),Math.abs(g))&&Math.abs(c-v)<=mt*Math.max(1,Math.abs(c),Math.abs(v))&&Math.abs(h-w)<=mt*Math.max(1,Math.abs(h),Math.abs(w))}Math.hypot||(Math.hypot=function(){for(var e=0,t=arguments.length;t--;)e+=arguments[t]*arguments[t];return Math.sqrt(e)});var Yt=Pt,Zt=Xt,$t={};t($t,"create",(()=>Zi)),t($t,"identity",(()=>$i)),t($t,"setAxisAngle",(()=>Ki)),t($t,"getAxisAngle",(()=>Ji)),t($t,"getAngle",(()=>er)),t($t,"dot",(()=>Tr)),t($t,"multiply",(()=>tr)),t($t,"rotateX",(()=>ir)),t($t,"rotateY",(()=>rr)),t($t,"rotateZ",(()=>nr)),t($t,"calculateW",(()=>sr)),t($t,"exp",(()=>ar)),t($t,"ln",(()=>or)),t($t,"pow",(()=>lr)),t($t,"scale",(()=>Fr)),t($t,"slerp",(()=>cr)),t($t,"random",(()=>hr)),t($t,"invert",(()=>ur)),t($t,"conjugate",(()=>dr)),t($t,"fromMat3",(()=>Ar)),t($t,"fromEuler",(()=>pr)),t($t,"str",(()=>fr)),t($t,"clone",(()=>Er)),t($t,"fromValues",(()=>xr)),t($t,"copy",(()=>Mr)),t($t,"set",(()=>Sr)),t($t,"add",(()=>_r)),t($t,"mul",(()=>Rr)),t($t,"lerp",(()=>Pr)),t($t,"length",(()=>Cr)),t($t,"len",(()=>Br)),t($t,"squaredLength",(()=>Dr)),t($t,"sqrLen",(()=>Ir)),t($t,"normalize",(()=>Lr)),t($t,"exactEquals",(()=>Or)),t($t,"equals",(()=>Nr)),t($t,"rotationTo",(()=>Gr)),t($t,"sqlerp",(()=>Vr)),t($t,"setAxes",(()=>kr));var Kt={};function Jt(){var e=new gt(3);return gt!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e}function ei(e){var t=new gt(3);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function ti(e){var t=e[0],i=e[1],r=e[2];return Math.hypot(t,i,r)}function ii(e,t,i){var r=new gt(3);return r[0]=e,r[1]=t,r[2]=i,r}function ri(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}function ni(e,t,i,r){return e[0]=t,e[1]=i,e[2]=r,e}function si(e,t,i){return e[0]=t[0]+i[0],e[1]=t[1]+i[1],e[2]=t[2]+i[2],e}function ai(e,t,i){return e[0]=t[0]-i[0],e[1]=t[1]-i[1],e[2]=t[2]-i[2],e}function oi(e,t,i){return e[0]=t[0]*i[0],e[1]=t[1]*i[1],e[2]=t[2]*i[2],e}function li(e,t,i){return e[0]=t[0]/i[0],e[1]=t[1]/i[1],e[2]=t[2]/i[2],e}function ci(e,t){return e[0]=Math.ceil(t[0]),e[1]=Math.ceil(t[1]),e[2]=Math.ceil(t[2]),e}function hi(e,t){return e[0]=Math.floor(t[0]),e[1]=Math.floor(t[1]),e[2]=Math.floor(t[2]),e}function ui(e,t,i){return e[0]=Math.min(t[0],i[0]),e[1]=Math.min(t[1],i[1]),e[2]=Math.min(t[2],i[2]),e}function di(e,t,i){return e[0]=Math.max(t[0],i[0]),e[1]=Math.max(t[1],i[1]),e[2]=Math.max(t[2],i[2]),e}function Ai(e,t){return e[0]=Math.round(t[0]),e[1]=Math.round(t[1]),e[2]=Math.round(t[2]),e}function pi(e,t,i){return e[0]=t[0]*i,e[1]=t[1]*i,e[2]=t[2]*i,e}function fi(e,t,i,r){return e[0]=t[0]+i[0]*r,e[1]=t[1]+i[1]*r,e[2]=t[2]+i[2]*r,e}function mi(e,t){var i=t[0]-e[0],r=t[1]-e[1],n=t[2]-e[2];return Math.hypot(i,r,n)}function gi(e,t){var i=t[0]-e[0],r=t[1]-e[1],n=t[2]-e[2];return i*i+r*r+n*n}function vi(e){var t=e[0],i=e[1],r=e[2];return t*t+i*i+r*r}function wi(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e}function yi(e,t){return e[0]=1/t[0],e[1]=1/t[1],e[2]=1/t[2],e}function bi(e,t){var i=t[0],r=t[1],n=t[2],s=i*i+r*r+n*n;return s>0&&(s=1/Math.sqrt(s)),e[0]=t[0]*s,e[1]=t[1]*s,e[2]=t[2]*s,e}function Ei(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function xi(e,t,i){var r=t[0],n=t[1],s=t[2],a=i[0],o=i[1],l=i[2];return e[0]=n*l-s*o,e[1]=s*a-r*l,e[2]=r*o-n*a,e}function Mi(e,t,i,r){var n=t[0],s=t[1],a=t[2];return e[0]=n+r*(i[0]-n),e[1]=s+r*(i[1]-s),e[2]=a+r*(i[2]-a),e}function Si(e,t,i,r,n,s){var a=s*s,o=a*(2*s-3)+1,l=a*(s-2)+s,c=a*(s-1),h=a*(3-2*s);return e[0]=t[0]*o+i[0]*l+r[0]*c+n[0]*h,e[1]=t[1]*o+i[1]*l+r[1]*c+n[1]*h,e[2]=t[2]*o+i[2]*l+r[2]*c+n[2]*h,e}function _i(e,t,i,r,n,s){var a=1-s,o=a*a,l=s*s,c=o*a,h=3*s*o,u=3*l*a,d=l*s;return e[0]=t[0]*c+i[0]*h+r[0]*u+n[0]*d,e[1]=t[1]*c+i[1]*h+r[1]*u+n[1]*d,e[2]=t[2]*c+i[2]*h+r[2]*u+n[2]*d,e}function Ri(e,t){t=t||1;var i=2*vt()*Math.PI,r=2*vt()-1,n=Math.sqrt(1-r*r)*t;return e[0]=Math.cos(i)*n,e[1]=Math.sin(i)*n,e[2]=r*t,e}function Fi(e,t,i){var r=t[0],n=t[1],s=t[2],a=i[3]*r+i[7]*n+i[11]*s+i[15];return a=a||1,e[0]=(i[0]*r+i[4]*n+i[8]*s+i[12])/a,e[1]=(i[1]*r+i[5]*n+i[9]*s+i[13])/a,e[2]=(i[2]*r+i[6]*n+i[10]*s+i[14])/a,e}function Ti(e,t,i){var r=t[0],n=t[1],s=t[2];return e[0]=r*i[0]+n*i[3]+s*i[6],e[1]=r*i[1]+n*i[4]+s*i[7],e[2]=r*i[2]+n*i[5]+s*i[8],e}function Pi(e,t,i){var r=i[0],n=i[1],s=i[2],a=i[3],o=t[0],l=t[1],c=t[2],h=n*c-s*l,u=s*o-r*c,d=r*l-n*o,A=n*d-s*u,p=s*h-r*d,f=r*u-n*h,m=2*a;return h*=m,u*=m,d*=m,A*=2,p*=2,f*=2,e[0]=o+h+A,e[1]=l+u+p,e[2]=c+d+f,e}function Ci(e,t,i,r){var n=[],s=[];return n[0]=t[0]-i[0],n[1]=t[1]-i[1],n[2]=t[2]-i[2],s[0]=n[0],s[1]=n[1]*Math.cos(r)-n[2]*Math.sin(r),s[2]=n[1]*Math.sin(r)+n[2]*Math.cos(r),e[0]=s[0]+i[0],e[1]=s[1]+i[1],e[2]=s[2]+i[2],e}function Bi(e,t,i,r){var n=[],s=[];return n[0]=t[0]-i[0],n[1]=t[1]-i[1],n[2]=t[2]-i[2],s[0]=n[2]*Math.sin(r)+n[0]*Math.cos(r),s[1]=n[1],s[2]=n[2]*Math.cos(r)-n[0]*Math.sin(r),e[0]=s[0]+i[0],e[1]=s[1]+i[1],e[2]=s[2]+i[2],e}function Di(e,t,i,r){var n=[],s=[];return n[0]=t[0]-i[0],n[1]=t[1]-i[1],n[2]=t[2]-i[2],s[0]=n[0]*Math.cos(r)-n[1]*Math.sin(r),s[1]=n[0]*Math.sin(r)+n[1]*Math.cos(r),s[2]=n[2],e[0]=s[0]+i[0],e[1]=s[1]+i[1],e[2]=s[2]+i[2],e}function Ii(e,t){var i=e[0],r=e[1],n=e[2],s=t[0],a=t[1],o=t[2],l=Math.sqrt(i*i+r*r+n*n)*Math.sqrt(s*s+a*a+o*o),c=l&&Ei(e,t)/l;return Math.acos(Math.min(Math.max(c,-1),1))}function Li(e){return e[0]=0,e[1]=0,e[2]=0,e}function Oi(e){return"vec3("+e[0]+", "+e[1]+", "+e[2]+")"}function Ni(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]}function Gi(e,t){var i=e[0],r=e[1],n=e[2],s=t[0],a=t[1],o=t[2];return Math.abs(i-s)<=mt*Math.max(1,Math.abs(i),Math.abs(s))&&Math.abs(r-a)<=mt*Math.max(1,Math.abs(r),Math.abs(a))&&Math.abs(n-o)<=mt*Math.max(1,Math.abs(n),Math.abs(o))}t(Kt,"create",(()=>Jt)),t(Kt,"clone",(()=>ei)),t(Kt,"length",(()=>ti)),t(Kt,"fromValues",(()=>ii)),t(Kt,"copy",(()=>ri)),t(Kt,"set",(()=>ni)),t(Kt,"add",(()=>si)),t(Kt,"subtract",(()=>ai)),t(Kt,"multiply",(()=>oi)),t(Kt,"divide",(()=>li)),t(Kt,"ceil",(()=>ci)),t(Kt,"floor",(()=>hi)),t(Kt,"min",(()=>ui)),t(Kt,"max",(()=>di)),t(Kt,"round",(()=>Ai)),t(Kt,"scale",(()=>pi)),t(Kt,"scaleAndAdd",(()=>fi)),t(Kt,"distance",(()=>mi)),t(Kt,"squaredDistance",(()=>gi)),t(Kt,"squaredLength",(()=>vi)),t(Kt,"negate",(()=>wi)),t(Kt,"inverse",(()=>yi)),t(Kt,"normalize",(()=>bi)),t(Kt,"dot",(()=>Ei)),t(Kt,"cross",(()=>xi)),t(Kt,"lerp",(()=>Mi)),t(Kt,"hermite",(()=>Si)),t(Kt,"bezier",(()=>_i)),t(Kt,"random",(()=>Ri)),t(Kt,"transformMat4",(()=>Fi)),t(Kt,"transformMat3",(()=>Ti)),t(Kt,"transformQuat",(()=>Pi)),t(Kt,"rotateX",(()=>Ci)),t(Kt,"rotateY",(()=>Bi)),t(Kt,"rotateZ",(()=>Di)),t(Kt,"angle",(()=>Ii)),t(Kt,"zero",(()=>Li)),t(Kt,"str",(()=>Oi)),t(Kt,"exactEquals",(()=>Ni)),t(Kt,"equals",(()=>Gi)),t(Kt,"sub",(()=>ki)),t(Kt,"mul",(()=>zi)),t(Kt,"div",(()=>Qi)),t(Kt,"dist",(()=>Ui)),t(Kt,"sqrDist",(()=>Xi)),t(Kt,"len",(()=>Hi)),t(Kt,"sqrLen",(()=>Wi)),t(Kt,"forEach",(()=>qi));var Vi,ki=ai,zi=oi,Qi=li,Ui=mi,Xi=gi,Hi=ti,Wi=vi,qi=(Vi=Jt(),function(e,t,i,r,n,s){var a,o;for(t||(t=3),i||(i=0),o=r?Math.min(r*t+i,e.length):e.length,a=i;a<o;a+=t)Vi[0]=e[a],Vi[1]=e[a+1],Vi[2]=e[a+2],n(Vi,Vi,s),e[a]=Vi[0],e[a+1]=Vi[1],e[a+2]=Vi[2];return e});function ji(e){var t=e[0],i=e[1],r=e[2],n=e[3];return Math.hypot(t,i,r,n)}function Yi(e){var t=e[0],i=e[1],r=e[2],n=e[3];return t*t+i*i+r*r+n*n}!function(){var e,t=(e=new gt(4),gt!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0,e[3]=0),e)}();function Zi(){var e=new gt(4);return gt!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e[3]=1,e}function $i(e){return e[0]=0,e[1]=0,e[2]=0,e[3]=1,e}function Ki(e,t,i){i*=.5;var r=Math.sin(i);return e[0]=r*t[0],e[1]=r*t[1],e[2]=r*t[2],e[3]=Math.cos(i),e}function Ji(e,t){var i=2*Math.acos(t[3]),r=Math.sin(i/2);return r>mt?(e[0]=t[0]/r,e[1]=t[1]/r,e[2]=t[2]/r):(e[0]=1,e[1]=0,e[2]=0),i}function er(e,t){var i=Tr(e,t);return Math.acos(2*i*i-1)}function tr(e,t,i){var r=t[0],n=t[1],s=t[2],a=t[3],o=i[0],l=i[1],c=i[2],h=i[3];return e[0]=r*h+a*o+n*c-s*l,e[1]=n*h+a*l+s*o-r*c,e[2]=s*h+a*c+r*l-n*o,e[3]=a*h-r*o-n*l-s*c,e}function ir(e,t,i){i*=.5;var r=t[0],n=t[1],s=t[2],a=t[3],o=Math.sin(i),l=Math.cos(i);return e[0]=r*l+a*o,e[1]=n*l+s*o,e[2]=s*l-n*o,e[3]=a*l-r*o,e}function rr(e,t,i){i*=.5;var r=t[0],n=t[1],s=t[2],a=t[3],o=Math.sin(i),l=Math.cos(i);return e[0]=r*l-s*o,e[1]=n*l+a*o,e[2]=s*l+r*o,e[3]=a*l-n*o,e}function nr(e,t,i){i*=.5;var r=t[0],n=t[1],s=t[2],a=t[3],o=Math.sin(i),l=Math.cos(i);return e[0]=r*l+n*o,e[1]=n*l-r*o,e[2]=s*l+a*o,e[3]=a*l-s*o,e}function sr(e,t){var i=t[0],r=t[1],n=t[2];return e[0]=i,e[1]=r,e[2]=n,e[3]=Math.sqrt(Math.abs(1-i*i-r*r-n*n)),e}function ar(e,t){var i=t[0],r=t[1],n=t[2],s=t[3],a=Math.sqrt(i*i+r*r+n*n),o=Math.exp(s),l=a>0?o*Math.sin(a)/a:0;return e[0]=i*l,e[1]=r*l,e[2]=n*l,e[3]=o*Math.cos(a),e}function or(e,t){var i=t[0],r=t[1],n=t[2],s=t[3],a=Math.sqrt(i*i+r*r+n*n),o=a>0?Math.atan2(a,s)/a:0;return e[0]=i*o,e[1]=r*o,e[2]=n*o,e[3]=.5*Math.log(i*i+r*r+n*n+s*s),e}function lr(e,t,i){return or(e,t),Fr(e,e,i),ar(e,e),e}function cr(e,t,i,r){var n,s,a,o,l,c=t[0],h=t[1],u=t[2],d=t[3],A=i[0],p=i[1],f=i[2],m=i[3];return(s=c*A+h*p+u*f+d*m)<0&&(s=-s,A=-A,p=-p,f=-f,m=-m),1-s>mt?(n=Math.acos(s),a=Math.sin(n),o=Math.sin((1-r)*n)/a,l=Math.sin(r*n)/a):(o=1-r,l=r),e[0]=o*c+l*A,e[1]=o*h+l*p,e[2]=o*u+l*f,e[3]=o*d+l*m,e}function hr(e){var t=vt(),i=vt(),r=vt(),n=Math.sqrt(1-t),s=Math.sqrt(t);return e[0]=n*Math.sin(2*Math.PI*i),e[1]=n*Math.cos(2*Math.PI*i),e[2]=s*Math.sin(2*Math.PI*r),e[3]=s*Math.cos(2*Math.PI*r),e}function ur(e,t){var i=t[0],r=t[1],n=t[2],s=t[3],a=i*i+r*r+n*n+s*s,o=a?1/a:0;return e[0]=-i*o,e[1]=-r*o,e[2]=-n*o,e[3]=s*o,e}function dr(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e[3]=t[3],e}function Ar(e,t){var i,r=t[0]+t[4]+t[8];if(r>0)i=Math.sqrt(r+1),e[3]=.5*i,i=.5/i,e[0]=(t[5]-t[7])*i,e[1]=(t[6]-t[2])*i,e[2]=(t[1]-t[3])*i;else{var n=0;t[4]>t[0]&&(n=1),t[8]>t[3*n+n]&&(n=2);var s=(n+1)%3,a=(n+2)%3;i=Math.sqrt(t[3*n+n]-t[3*s+s]-t[3*a+a]+1),e[n]=.5*i,i=.5/i,e[3]=(t[3*s+a]-t[3*a+s])*i,e[s]=(t[3*s+n]+t[3*n+s])*i,e[a]=(t[3*a+n]+t[3*n+a])*i}return e}function pr(e,t,i,r){var n=.5*Math.PI/180;t*=n,i*=n,r*=n;var s=Math.sin(t),a=Math.cos(t),o=Math.sin(i),l=Math.cos(i),c=Math.sin(r),h=Math.cos(r);return e[0]=s*l*h-a*o*c,e[1]=a*o*h+s*l*c,e[2]=a*l*c-s*o*h,e[3]=a*l*h+s*o*c,e}function fr(e){return"quat("+e[0]+", "+e[1]+", "+e[2]+", "+e[3]+")"}var mr,gr,vr,wr,yr,br,Er=function(e){var t=new gt(4);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t},xr=function(e,t,i,r){var n=new gt(4);return n[0]=e,n[1]=t,n[2]=i,n[3]=r,n},Mr=function(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e},Sr=function(e,t,i,r,n){return e[0]=t,e[1]=i,e[2]=r,e[3]=n,e},_r=function(e,t,i){return e[0]=t[0]+i[0],e[1]=t[1]+i[1],e[2]=t[2]+i[2],e[3]=t[3]+i[3],e},Rr=tr,Fr=function(e,t,i){return e[0]=t[0]*i,e[1]=t[1]*i,e[2]=t[2]*i,e[3]=t[3]*i,e},Tr=function(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3]*t[3]},Pr=function(e,t,i,r){var n=t[0],s=t[1],a=t[2],o=t[3];return e[0]=n+r*(i[0]-n),e[1]=s+r*(i[1]-s),e[2]=a+r*(i[2]-a),e[3]=o+r*(i[3]-o),e},Cr=ji,Br=Cr,Dr=Yi,Ir=Dr,Lr=function(e,t){var i=t[0],r=t[1],n=t[2],s=t[3],a=i*i+r*r+n*n+s*s;return a>0&&(a=1/Math.sqrt(a)),e[0]=i*a,e[1]=r*a,e[2]=n*a,e[3]=s*a,e},Or=function(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]},Nr=function(e,t){var i=e[0],r=e[1],n=e[2],s=e[3],a=t[0],o=t[1],l=t[2],c=t[3];return Math.abs(i-a)<=mt*Math.max(1,Math.abs(i),Math.abs(a))&&Math.abs(r-o)<=mt*Math.max(1,Math.abs(r),Math.abs(o))&&Math.abs(n-l)<=mt*Math.max(1,Math.abs(n),Math.abs(l))&&Math.abs(s-c)<=mt*Math.max(1,Math.abs(s),Math.abs(c))},Gr=(mr=Jt(),gr=ii(1,0,0),vr=ii(0,1,0),function(e,t,i){var r=Ei(t,i);return r<-.999999?(xi(mr,gr,t),Hi(mr)<1e-6&&xi(mr,vr,t),bi(mr,mr),Ki(e,mr,Math.PI),e):r>.999999?(e[0]=0,e[1]=0,e[2]=0,e[3]=1,e):(xi(mr,t,i),e[0]=mr[0],e[1]=mr[1],e[2]=mr[2],e[3]=1+r,Lr(e,e))}),Vr=(wr=Zi(),yr=Zi(),function(e,t,i,r,n,s){return cr(wr,t,n,s),cr(yr,i,r,s),cr(e,wr,yr,2*s*(1-s)),e}),kr=(br=wt(),function(e,t,i,r){return br[0]=i[0],br[3]=i[1],br[6]=i[2],br[1]=r[0],br[4]=r[1],br[7]=r[2],br[2]=-t[0],br[5]=-t[1],br[8]=-t[2],Lr(e,Ar(e,br))}),zr={};Object.defineProperty(zr,"__esModule",{value:!0});var Qr={};Object.defineProperty(Qr,"__esModule",{value:!0});Qr.default=class{constructor(){this._pose=null,this._view=null,this.poseMatrix=new p5.Matrix,this.initialMVMatrix=new p5.Matrix,this.leftPMatrix=new p5.Matrix,this.rightPMatrix=new p5.Matrix,this.position=new p5.Vector(0,0,0),this.setPosition=function(e,t,i){this.position.set(e,t,i),p5.instance._renderer.translate(-e,-t,-i)}}set pose(e){this._pose=e,this.poseMatrix.set(e.poseModelMatrix)}get pose(){return this._pose}set view(e){this._view=e,p5.instance._renderer.uMVMatrix.set(this._view.transform.inverse.matrix),p5.instance._renderer.uPMatrix.set(this._view.projectionMatrix),p5.instance._renderer._curCamera.cameraMatrix.set(p5.Matrix.identity().mult(this._view.transform.inverse.matrix)),"left"===e.eye?this.leftPMatrix.set(p5.instance._renderer.uPMatrix.copy()):this.rightPMatrix.set(p5.instance._renderer.uPMatrix.copy())}get view(){return this._view}},p5.prototype.setViewerPosition=function(e,t,i){const{viewer:r}=p5xr.instance;r.setPosition(e,t,i)},p5.prototype.sticky=function(e=!1){push(),p5xr.instance.viewer.drawOnTop=e,e&&p5.instance._renderer.GL.disable(p5.instance._renderer.GL.DEPTH_TEST),p5.instance._renderer.uMVMatrix.set(p5.Matrix.identity());const t=p5xr.instance.viewer.position;setViewerPosition(t.x,t.y,t.z)},p5.prototype.noSticky=function(){p5.instance._renderer.GL.enable(p5.instance._renderer.GL.DEPTH_TEST),pop()};var Ur=qr(Qr),Xr={};Object.defineProperty(Xr,"__esModule",{value:!0});Xr.default=class{constructor(e){this.options=e||{},this.options.color=e.color||"rgb(237, 34, 93)",this.options.background=e.background||!1,this.options.disabledOpacity=e.disabledOpacity||.5,this.options.height=e.height||window.innerWidth/5,this.options.corners=e.corners||"square",this.options.cssprefix=e.cssprefix||"webvr-ui",this.options.textEnterXRTitle=e.textEnterXRTitle||"ENTER XR",this.options.textXRNotFoundTitle=e.textXRNotFoundTitle||"XR NOT FOUND",this.options.textExitXRTitle=e.textExitXRTitle||"EXIT XR",this.options.onRequestSession=e.onRequestSession||function(){},this.options.onEndSession=e.onEndSession||function(){},this.options.injectCSS=!1!==e.injectCSS,this.options=e,this.device=null,this.session=null,this.logoScale=1.2,this._WEBXR_UI_CSS_INJECTED={},this.domElement=e.domElement||this.createDefaultView(e),this.__defaultDisplayStyle=this.domElement.style.display||"initial",this.domElement.addEventListener("click",(()=>this.__onXRButtonClick())),this.__forceDisabled=!1,this.__setDisabledAttribute(!0),this.setTitle(this.options.textXRNotFoundTitle)}generateInnerHTML(e,t){const i=t*this.logoScale;return`<button class="${e}-button">\n <div class="${e}-title"></div>\n <div class="${e}-logo" >${this.generateXRIconString(e,i)+this.generateNoXRIconString(e,i)}</div>\n </button>`}createDefaultView(e){const t=e.height/3;e.injectCSS&&(this._WEBXR_UI_CSS_INJECTED[e.cssprefix]||(this.injectCSS(this.generateCSS(e,t)),this._WEBXR_UI_CSS_INJECTED[e.cssprefix]=!0));const i=document.createElement("div");return i.innerHTML=this.generateInnerHTML(e.cssprefix,t),i.firstChild}createXRIcon(e,t){const i=document.createElement("div");return i.innerHTML=generateXRIconString(e,t),i.firstChild}createNoXRIcon(e,t){const i=document.createElement("div");return i.innerHTML=generateNoXRIconString(e,t),i.firstChild}generateXRIconString(e,t){return`<svg class="${e}-svg" version="1.1" x="0px" y="0px"\n width="${28/18*t}px" height="${t}px" viewBox="0 0 28 18" xml:space="preserve">\n <path d="M26.8,1.1C26.1,0.4,25.1,0,24.2,0H3.4c-1,0-1.7,0.4-2.4,1.1C0.3,1.7,0,2.7,0,3.6v10.7\n c0,1,0.3,1.9,0.9,2.6C1.6,17.6,2.4,18,3.4,18h5c0.7,0,1.3-0.2,1.8-0.5c0.6-0.3,1-0.8,1.3-1.4l\n 1.5-2.6C13.2,13.1,13,13,14,13v0h-0.2 h0c0.3,0,0.7,0.1,0.8,0.5l1.4,2.6c0.3,0.6,0.8,1.1,1.3,\n 1.4c0.6,0.3,1.2,0.5,1.8,0.5h5c1,0,2-0.4,2.7-1.1c0.7-0.7,1.2-1.6,1.2-2.6 V3.6C28,2.7,27.5,\n 1.7,26.8,1.1z M7.4,11.8c-1.6,0-2.8-1.3-2.8-2.8c0-1.6,1.3-2.8,2.8-2.8c1.6,0,2.8,1.3,2.8,2.8\n C10.2,10.5,8.9,11.8,7.4,11.8z M20.1,11.8c-1.6,0-2.8-1.3-2.8-2.8c0-1.6,1.3-2.8,2.8-2.8C21.7\n ,6.2,23,7.4,23,9 C23,10.5,21.7,11.8,20.1,11.8z"/>\n </svg>`}generateNoXRIconString(e,t){const i=28/18;return`<svg class="${e}-svg-error" x="0px" y="0px"\n width="${i*t}px" height="${i*t}px" viewBox="0 0 28 28" xml:space="preserve">\n <path d="M17.6,13.4c0-0.2-0.1-0.4-0.1-0.6c0-1.6,1.3-2.8,2.8-2.8s2.8,1.3,2.8,2.8s-1.3,2.8-2.8,2.8\n c-0.2,0-0.4,0-0.6-0.1l5.9,5.9c0.5-0.2,0.9-0.4,1.3-0.8\n c0.7-0.7,1.1-1.6,1.1-2.5V7.4c0-1-0.4-1.9-1.1-2.5c-0.7-0.7-1.6-1-2.5-1\n H8.1 L17.6,13.4z"/>\n <path d="M10.1,14.2c-0.5,0.9-1.4,1.4-2.4,1.4c-1.6,0-2.8-1.3-2.8-2.8c0-1.1,0.6-2,1.4-2.5\n L0.9,5.1 C0.3,5.7,0,6.6,0,7.5v10.7c0,1,0.4,1.8,1.1,2.5c0.7,0.7,1.6,1,2.5,1\n h5c0.7,0,1.3-0.1,1.8-0.5c0.6-0.3,1-0.8,1.3-1.4l1.3-2.6 L10.1,14.2z"/>\n <path d="M25.5,27.5l-25-25C-0.1,2-0.1,1,0.5,0.4l0,0C1-0.1,2-0.1,2.6,0.4l25,25c0.6,0.6,0.6,1.5\n ,0,2.1l0,0 C27,28.1,26,28.1,25.5,27.5z"/>\n </svg>`}setDevice(e){return this.device=e,this.__updateButtonState(),this}setSession(e){return this.session=e,this.__updateButtonState(),this}setTitle(e){return this.domElement.title=e,this.ifChild(this.domElement,this.options.cssprefix,"title",(t=>{e?(t.innerText=e,t.style.display="initial"):t.style.display="none"})),this}generateCSS(e,t=18){const{height:i}=e,r=e.background?e.background:e.color,n=e.cssprefix;let s;return s="round"==e.corners?e.height/2:"square"==e.corners?2:e.corners,`\n @font-face {\n font-family: 'Karla';\n font-style: normal;\n font-weight: 400;\n src: local('Karla'), local('Karla-Regular'),\n url(https://fonts.gstatic.com/s/karla/v5/31P4mP32i98D9CEnGyeX9Q.woff2) format('woff2');\n unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;\n }\n @font-face {\n font-family: 'Karla';\n font-style: normal;\n font-weight: 400;\n src: local('Karla'), local('Karla-Regular'),\n url(https://fonts.gstatic.com/s/karla/v5/Zi_e6rBgGqv33BWF8WTq8g.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074,\n U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;\n }\n\n button.${n}-button {\n font-family: 'Karla', sans-serif;\n\n border: ${r} 2px solid;\n border-radius: ${s}px;\n box-sizing: border-box;\n background: ${e.background?e.background:"none"};\n\n height: ${i}px;\n min-width: ${9.6*t}px;\n display: inline-block;\n position: absolute;\n top: 5%;\n left: 15%;\n cursor: pointer;\n }\n\n button.${n}-button:focus {\n outline: none;\n }\n\n /*\n * Logo\n */\n\n .${n}-logo {\n width: ${i}px;\n height: ${i}px;\n position: absolute;\n top:0px;\n left:0px;\n width: ${i-4}px;\n height: ${i-4}px;\n }\n .${n}-svg {\n fill: ${e.color};\n margin-top: ${(i-t*this.logoScale)/2-2}px;\n margin-left: ${i/3}px;\n }\n .${n}-svg-error {\n fill: ${e.color};\n display:none;\n margin-top: ${(i-28/18*t*this.logoScale)/2-2}px;\n margin-left: ${i/3}px;\n }\n\n\n /*\n * Title\n */\n\n .${n}-title {\n color: ${e.color};\n position: relative;\n font-size: ${t}px;\n padding-left: ${1.05*i}px;\n padding-right: ${s-10<5?i/3:s-10}px;\n }\n\n /*\n * disabled\n */\n\n button.${n}-button[disabled=true] {\n opacity: ${e.disabledOpacity};\n }\n\n button.${n}-button[disabled=true] > .${n}-logo > .${n}-svg {\n display:none;\n }\n\n button.${n}-button[disabled=true] > .${n}-logo > .${n}-svg-error {\n display:initial;\n }\n `}injectCSS(e){const t=document.createElement("style");t.innerHTML=e;const i=document.getElementsByTagName("head")[0];i.insertBefore(t,i.firstChild)}ifChild(e,t,i,r){const n=e.querySelector(`.${t}-${i}`);n&&r(n)}setTooltip(e){return this.domElement.title=e,this}show(){return this.domElement.style.display=this.__defaultDisplayStyle,this}hide(){return this.domElement.style.display="none",this}enable(){return this.__setDisabledAttribute(!1),this.__forceDisabled=!1,this}disable(){return this.__setDisabledAttribute(!0),this.__forceDisabled=!0,this}remove(){this.domElement.parentElement&&this.domElement.parentElement.removeChild(this.domElement)}__setDisabledAttribute(e){e||this.__forceDisabled?this.domElement.setAttribute("disabled","true"):this.domElement.removeAttribute("disabled")}__onXRButtonClick(){this.session?this.options.onEndSession(this.session):this.device&&("undefined"!=typeof DeviceMotionEvent&&"function"==typeof DeviceMotionEvent.requestPermission&&DeviceMotionEvent.requestPermission().then((e=>{"granted"===e&&window.addEventListener("devicemotion",(()=>{}))})).catch(console.error),"undefined"!=typeof DeviceOrientationEvent&&"function"==typeof DeviceOrientationEvent.requestPermission&&DeviceOrientationEvent.requestPermission().then((e=>{"granted"===e&&window.addEventListener("deviceorientation",(()=>{}))})).catch(console.error),this.options.onRequestSession(this.device))}__updateButtonState(){this.session?(this.setTitle(this.options.textExitXRTitle),this.setTooltip("Exit XR presentation"),this.__setDisabledAttribute(!1)):this.device?(this.setTitle(this.options.textEnterXRTitle),this.setTooltip("Enter XR"),this.__setDisabledAttribute(!1)):(this.setTitle(this.options.textXRNotFoundTitle),this.setTooltip("No XR headset found."),this.__setDisabledAttribute(!0))}};var Hr=qr(Xr),Wr={};Object.defineProperty(Wr,"__esModule",{value:!0});function qr(e){return e&&e.__esModule?e:{default:e}}Wr.default=class{constructor(e,t,i){this._inputSource=e,this._targetRayPose=t.getPose(this._inputSource.targetRaySpace,i),this._pose,this.gamepad=e.gamepad,this._dir=Kt.create();const r=ft.create(),n=Kt.create();this._dir[2]=-1,this._targetRayPose&&(Kt.transformMat4(n,n,this._targetRayPose.transform.matrix),ft.fromMat4(r,this._targetRayPose.transform.matrix),Kt.transformMat3(this._dir,this._dir,r)),this.direction=this._dir}get direction(){return new p5.Vector(this._dir[0],this._dir[1],this._dir[2])}set direction(e){this._dir=Kt.copy(this._dir,e),Kt.normalize(this._dir,this._dir),this.inv_dir=Kt.fromValues(1/this._dir[0],1/this._dir[1],1/this._dir[2]),this.sign=[this.inv_dir[0]<0?1:0,this.inv_dir[1]<0?1:0,this.inv_dir[2]<0?1:0]}get pose(){return this.updatePose(),this._pose.transform.matrix}get position(){this.updatePose();const e=this._pose?.transform?.position;return new p5.Vector(e.x,e.y,e.z)}updatePose(){this._pose=window.p5xr.instance.frame.getPose(this._inputSource.gripSpace,window.p5xr.instance.xrRefSpace)}get trigger(){return this.updateGamepad(),this.gamepad?.buttons[0]}get grip(){return this.updateGamepad(),this.gamepad.buttons[1]}get touchpad(){return this.updateGamepad(),this.gamepad.buttons[2]}get thumbstick(){return this.updateGamepad(),this.gamepad.buttons[3]}get touchpad2D(){return this.updateGamepad(),new p5.Vector(this.gamepad.axes[0],this.gamepad.axes[1])}get thumbstick2D(){return this.updateGamepad(),new p5.Vector(this.gamepad.axes[2],this.gamepad.axes[3])}updateGamepad(){this.gamepad=this._inputSource.gamepad}};zr.default=class{constructor(){this.xrDevice=null,this.xrButton=null,this.isVR=null,this.xrSession=null,this.xrRefSpace=null,this.xrViewerSpace=null,this.xrHitTestSource=null,this.frame=null,this.gl=null,this.curClearColor=color(255,255,255),this.viewer=new Ur.default}removeLoadingElement(){const e=document.getElementById(window._loadingScreenId);e&&e.parentNode.removeChild(e)}updateXR(){const e=p5.instance._renderer;e.ambientLightColors.length=0,e.specularColors=[1,1,1],e.directionalLightDirections.length=0,e.directionalLightDiffuseColors.length=0,e.directionalLightSpecularColors.length=0,e.pointLightPositions.length=0,e.pointLightDiffuseColors.length=0,e.pointLightSpecularColors.length=0,e.spotLightPositions.length=0,e.spotLightDirections.length=0,e.spotLightDiffuseColors.length=0,e.spotLightSpecularColors.length=0,e.spotLightAngle.length=0,e.spotLightConc.length=0,e._enableLighting=!1,e._tint=[255,255,255,255]}setupCanvas(){createCanvas(windowWidth,windowHeight,WEBGL),p5.instance._setupDone=!0}createButton(){p5.instance._incrementPreload(),this.setupCanvas(),this.removeLoadingElement(),this.xrButton=new Hr.default({onRequestSession:this.onXRButtonClicked.bind(this),onEndSession:this.onSessionEnded.bind(this),textEnterXRTitle:this.isVR?"ENTER VR":"ENTER AR"});let e=document.querySelector("header");e||(e=document.createElement("header"),document.querySelector("body").appendChild(e)),e.appendChild(this.xrButton.domElement)}disableButton(){this.xrButton.setTitle("AR Unavailable"),this.xrButton.setTooltip("No XR headset found."),this.xrButton.__setDisabledAttribute(!0)}sessionCheck(){const e=window.injectedPolyfill?"with polyfill":"without polyfill";this.isVR?navigator.xr.isSessionSupported("immersive-vr").then((t=>{t?(console.log(`VR supported ${e}`),this.xrButton.setDevice(!0),this.isImmersive=!0):(console.log("This device does not support immersive VR sessions."),this.isImmersive=!1),this.xrButton.setDevice(!0)})).catch((e=>{console.log(e.message)})):navigator.xr.isSessionSupported("immersive-ar").then((t=>{t?(console.log(`AR supported ${e}`),this.xrButton.setDevice(!0)):this.disableButton()}))}onXRFrame(e,t){const i=this.xrSession=t.session;if(null===i||null===this.gl)return;i.requestAnimationFrame(this.onXRFrame.bind(this));let r=this.xrRefSpace;this.isVR&&!this.isImmersive&&(r=this.getAdjustedRefSpace(this.xrRefSpace));const n=t.getViewerPose(this.xrRefSpace),s=i.renderState.baseLayer;if(this.frame=t,n){this.viewer.pose=t.getViewerPose(r),this.gl.bindFramebuffer(this.gl.FRAMEBUFFER,s.framebuffer),this.isVR&&this.clearVR();let e=0;for(const t of this.viewer.pose.views){this.viewer.view=t;const i=this.isImmersive?1:pixelDensity(),r=s.getViewport(this.viewer.view);this.gl.viewport(r.x,r.y,r.width*i,r.height*i),this.updateViewport(r),this.drawEye(e),e++}}}updateViewport(e){p5.instance._renderer._viewport[0]=e.x,p5.instance._renderer._viewport[1]=e.y,p5.instance._renderer._viewport[2]=e.width,p5.instance._renderer._viewport[3]=e.height}drawEye(e){const t=window,i=t.setup,r=t.draw,n=t.calculate;if(this.isVR){if(0===e){"function"==typeof n&&n();const e=window.performance.now();p5.instance.deltaTime=e-p5.instance._lastFrameTime,p5.instance._frameRate=1e3/p5.instance.deltaTime,p5.instance._setProperty("deltaTime",p5.instance.deltaTime),p5.instance._lastFrameTime=e,t._setProperty("frameCount",t.frameCount+1)}}else scale(.01);if(p5.instance._renderer.isP3D){if("function"==typeof r){void 0===i&&t.scale(t._pixelDensity,t._pixelDensity),this.updateXR(),p5.instance._inUserDraw=!0;try{r()}finally{p5.instance._inUserDraw=!1}}}else console.error("Sketch does not have 3D Renderer")}getXRInput(e){let t;return this.xrSession.inputSources.forEach((i=>{i.handedness===e&&(t=new p5xrInput(i,this.frame,this.xrRefSpace))})),t}onSessionEnded(){this.isVR||(this.xrHitTestSource.cancel(),this.xrHitTestSource=null),this.xrSession&&(this.xrSession.end(),this.xrSession=null);const e=document.getElementsByClassName("p5Canvas");for(;e.length>0;)e[0].parentNode.removeChild(e[0]);this.xrButton.session=null,this.xrButton.setTitle(this.isVR?"ENTER VR":"ENTER AR"),this.gl=null}printUnsupportedMessage(){console.warn("Your browser/hardware does not work with AR Mode currently. This is undergoing heavy development currently.You may be able to fix this by enabling WebXR flags in Chrome.")}remove(){this.xrButton&&this.xrButton.remove(),window.p5xr.instance=null}get instance(){return window.p5xr.instance}set instance(e){return window.p5xr.instance=e,window.p5xr.instance}};var jr,Yr=(jr=zr)&&jr.__esModule?jr:{default:jr};class Zr extends Yr.default{constructor(){super(),this.isVR=!0,this.isImmersive=!0,this.lookYaw=0,this.lookPitch=0,this.LOOK_SPEED=.0025,this.primaryTouch=void 0,this.prevTouchX=void 0,this.prevTouchY=void 0}initVR(){this.createButton(),navigator.xr&&this.sessionCheck()}startSketch(e){this.xrSession=this.xrButton.session=e,this.canvas=p5.instance.canvas,this.canvas.style.visibility="visible",this.xrSession.addEventListener("end",this.onSessionEnded.bind(this)),"function"==typeof window.setup&&(window.setup(),p5.instance._millisStart=window.performance.now()),this.onRequestSession()}onXRButtonClicked(){this.isImmersive?(console.log("requesting session with mode: immersive-vr"),navigator.xr.requestSession("immersive-vr").then(this.startSketch.bind(this))):(console.log("requesting session with mode: non-immersive-vr"),this.xrButton.hide(),navigator.xr.requestSession("inline").then(this.startSketch.bind(this)))}onRequestSession(){this.xrButton.setTitle(this.isVR?"EXIT VR":"EXIT AR"),p5.instance._renderer._curCamera.cameraType="custom",this.gl=this.canvas.getContext("webgl",{xrCompatible:!0}),this.isImmersive?this.gl.makeXRCompatible().then((()=>{this.setupBaseLayer(),this.setupReferenceSpace()})).catch((e=>{console.log(e)})):(this.setupBaseLayer(),this.setupReferenceSpace(),this.xrSession.updateRenderState({inlineVerticalFieldOfView:Math.PI/180*70}),this.addInlineViewListeners(this.canvas)),this.xrSession.requestAnimationFrame(this.onXRFrame.bind(this))}setupBaseLayer(){this.baseLayer=new XRWebGLLayer(this.xrSession,this.gl),this.xrSession.updateRenderState({baseLayer:this.baseLayer})}setupReferenceSpace(){const e=this.isImmersive?"local":"viewer";this.xrSession.requestReferenceSpace(e).then((e=>{this.xrRefSpace=e}))}clearVR(){null!==this.curClearColor&&(p5.instance.background(this.curClearColor),this.gl.clear(this.gl.DEPTH_BUFFER_BIT))}getAdjustedRefSpace(e){const t=$t.create();$t.rotateX(t,t,-this.lookPitch),$t.rotateY(t,t,-this.lookYaw);const i=new XRRigidTransform({x:0,y:0,z:0},{x:t[0],y:t[1],z:t[2],w:t[3]});return e.getOffsetReferenceSpace(i)}rotateView(e,t){this.lookYaw+=e*this.LOOK_SPEED,this.lookPitch+=t*this.LOOK_SPEED,this.lookPitch<.5*-Math.PI&&(this.lookPitch=.5*-Math.PI),this.lookPitch>.5*Math.PI&&(this.lookPitch=.5*Math.PI)}addInlineViewListeners(e){this.canvas.addEventListener("mousemove",(e=>{e.buttons&&this.rotateView(e.movementX,e.movementY)})),this.canvas.addEventListener("touchstart",(e=>{if(void 0===this.primaryTouch){const t=e.changedTouches[0];this.primaryTouch=t.identifier,this.prevTouchX=t.pageX,this.prevTouchY=t.pageY}})),e.addEventListener("touchend",(e=>{for(const t of e.changedTouches)this.primaryTouch===t.identifier&&(this.primaryTouch=void 0,this.rotateView(t.pageX-this.prevTouchX,t.pageY-this.prevTouchY))})),e.addEventListener("touchcancel",(e=>{for(const t of e.changedTouches)this.primaryTouch===t.identifier&&(this.primaryTouch=void 0)})),e.addEventListener("touchmove",(e=>{for(const t of e.changedTouches)this.primaryTouch===t.identifier&&(this.rotateView(t.pageX-this.prevTouchX,t.pageY-this.prevTouchY),this.prevTouchX=t.pageX,this.prevTouchY=t.pageY)}))}}pt.default=Zr;var $r=on(pt),Kr={};Object.defineProperty(Kr,"__esModule",{value:!0});var Jr=rn(zr),en={};Object.defineProperty(en,"__esModule",{value:!0});en.default=class{constructor(e,t,i){this.position={x:100*e,y:100*t,z:100*i}}dispose(){}isTracking(){}isStopped(){}transform(){translate(this.position.x,this.position.y,this.position.z)}};var tn=rn(en);function rn(e){return e&&e.__esModule?e:{default:e}}class nn extends Jr.default{constructor(){super(),this.canvas=null}initAR(){this.createButton(),navigator.xr&&this.sessionCheck()}startSketch(e){this.xrSession=this.xrButton.session=e,this.xrSession.addEventListener("end",this.onSessionEnded),"function"==typeof touchStarted&&this.xrSession.addEventListener("select",touchStarted),this.canvas=p5.instance.canvas,p5.instance._renderer._curCamera.cameraType="custom",this.onRequestSession(),p5.instance._decrementPreload()}onSelect(e){const t=window.mousePressed;"function"==typeof t&&t()}detectHit(e){if(null==e)return console.warn("You must pass the touchStarted event to detectHit."),null;if(!this.xrSession)return null;e.clientY,window.innerHeight,e.clientX,window.innerWidth;if(this.xrHitTestSource&&this.viewer.pose&&this.frame){const e=this.frame.getHitTestResults(this.xrHitTestSource);if(e.length>0){const t=e[0].getPose(this.xrRefSpace);return createVector(t.transform.position.x,t.transform.position.y,t.transform.position.z)}}}createAnchor(e){return null==e?null:new tn.default(e.x,e.y,e.z)}onXRButtonClicked(e){window.injectedPolyfill?console.log("ARCORE mode is not supported with a polyfill. Try using a more recent browser version"):(navigator.getUserMedia=navigator.getUserMedia||navigator.webkitGetUserMedia||navigator.mozGetUserMedia||navigator.msGetUserMedia,navigator.xr.requestSession("immersive-ar",{requiredFeatures:["local","hit-test"]}).then((e=>{this.startSketch(e)}),(e=>{console.log(`${e} unable to request an immersive-ar session.`)})))}onRequestSession(){this.gl=this.canvas.getContext("webgl",{xrCompatible:!0}),this.gl.makeXRCompatible().then((()=>{this.xrSession.updateRenderState({baseLayer:new XRWebGLLayer(this.xrSession,this.gl)})})),this.xrSession.requestReferenceSpace("viewer").then((e=>{this.xrViewerSpace=e,this.xrSession.requestHitTestSource({space:this.xrViewerSpace}).then((e=>{this.xrHitTestSource=e}))})),this.xrSession.requestReferenceSpace("local").then((e=>{this.xrRefSpace=e,this.xrSession.requestAnimationFrame(this.onXRFrame.bind(this))}))}}Kr.default=nn;var sn=on(Kr),an=function(e){return e&&e.__esModule?e:{default:e}}(Qr);function on(e){return e&&e.__esModule?e:{default:e}}an.default.prototype.getRayFromScreen=function(e,t){const i={origin:new p5.Vector(0,0,0),direction:new p5.Vector};let r=this.poseMatrix.copy();r.transpose(r),r=r.mat4,i.origin.x=r[3],i.origin.y=r[7],i.origin.z=r[11];let n=this.initialMVMatrix.copy();n.transpose(n),n=n.mat4;const s=i.origin.copy();i.origin.x=n[0]*s.x+n[1]*s.y+n[2]*s.z+n[3],i.origin.y=n[4]*s.x+n[5]*s.y+n[6]*s.z+n[7],i.origin.z=n[8]*s.x+n[9]*s.y+n[10]*s.z+n[11];const a=new p5.Vector(e,t,-1);let o=new p5.Matrix;o.invert(this.leftPMatrix.copy()),o.transpose(o),o=o.mat4;const l=a.copy();a.x=o[0]*l.x+o[1]*l.y+o[2]*l.z,a.y=o[4]*l.x+o[5]*l.y+o[6]*l.z,a.normalize();const c=new p5.Vector(e,t,-1);let h=new p5.Matrix;h.invert(this.rightPMatrix.copy()),h.transpose(h),h=h.mat4;const u=c.copy();return c.x=h[0]*u.x+h[1]*u.y+h[2]*u.z,c.y=h[4]*u.x+h[5]*u.y+h[6]*u.z,c.normalize(),i.direction=p5.Vector.add(a,c).normalize(),i},p5.prototype.intersectsSphere=function(){const e=arguments[0];let t={origin:null,direction:null};if(2===arguments.length&&arguments[1].hasOwnProperty("origin"))t.origin=arguments[1].origin.copy(),t.direction=arguments[1].direction.copy();else{const e=arguments[1]||0,i=arguments[2]||0;t=p5xr.instance.viewer.getRayFromScreen(e,i)}if(null===t)return!1;let i=p5.instance._renderer.uMVMatrix.copy();i.transpose(i),i=i.mat4;const r=new p5.Vector(0,0,0);if(r.x=i[3],r.y=i[7],r.z=i[11],p5.Vector.sub(t.origin,r).mag()<=e)return!0;if(p5.Vector.dot(p5.Vector.sub(r,t.origin),t.direction)<0)return!1;const n=p5.Vector.sub(t.origin,r),s=2*p5.Vector.dot(t.direction,n),a=p5.Vector.mag(n)*p5.Vector.mag(n)-e*e,o=s*s-4*a;return o>=0},p5.prototype.intersectsBox=function(){const e=arguments[0];let t,i,r={origin:null,direction:null};arguments[arguments.length-1].hasOwnProperty("origin")?(r.origin=arguments[arguments.length-1].origin.copy(),r.direction=arguments[arguments.length-1].direction.copy(),t=arguments.length>2?arguments[1]:e,i=arguments.length>3?arguments[2]:t):5===arguments.length?(r=p5xr.instance.viewer.getRayFromScreen(arguments[3],arguments[4]),t=arguments[1],i=arguments[2]):(r=p5xr.instance.viewer.getRayFromScreen(0,0),t=arguments.length>1?arguments[1]:e,i=arguments.length>2?arguments[2]:t);let n=p5.instance._renderer.uMVMatrix.copy();n.transpose(n),n.invert(n),n=n.mat4;const s=r.origin.copy();r.origin.x=n[0]*s.x+n[1]*s.y+n[2]*s.z+n[3],r.origin.y=n[4]*s.x+n[5]*s.y+n[6]*s.z+n[7],r.origin.z=n[8]*s.x+n[9]*s.y+n[10]*s.z+n[11];const a=r.direction.copy();r.direction.x=n[0]*a.x+n[1]*a.y+n[2]*a.z,r.direction.y=n[4]*a.x+n[5]*a.y+n[6]*a.z,r.direction.z=n[8]*a.x+n[9]*a.y+n[10]*a.z,r.direction.normalize();const o=new p5.Vector(-.5*e,-.5*t,-.5*i),l=new p5.Vector(.5*e,.5*t,.5*i),c=(o.x-r.origin.x)/r.direction.x,h=(l.x-r.origin.x)/r.direction.x,u=(o.y-r.origin.y)/r.direction.y,d=(l.y-r.origin.y)/r.direction.y,A=(o.z-r.origin.z)/r.direction.z,p=(l.z-r.origin.z)/r.direction.z,f=Math.max(Math.max(Math.min(c,h),Math.min(u,d)),Math.min(A,p)),m=Math.min(Math.min(Math.max(c,h),Math.max(u,d)),Math.max(A,p));return!(m<0||f>m)},p5.prototype.intersectsPlane=function(){let e={origin:null,direction:null};arguments[0].hasOwnProperty("origin")?(e.origin=arguments[0].origin.copy(),e.direction=arguments[0].direction.copy()):e=p5xr.instance.viewer.getRayFromScreen(arguments[0],arguments[1]);let t=p5.instance._renderer.uMVMatrix.copy();t.transpose(t),t.invert(t),t=t.mat4;const i=e.origin.copy();e.origin.x=t[0]*i.x+t[1]*i.y+t[2]*i.z+t[3],e.origin.y=t[4]*i.x+t[5]*i.y+t[6]*i.z+t[7],e.origin.z=t[8]*i.x+t[9]*i.y+t[10]*i.z+t[11];const r=e.direction.copy();e.direction.x=t[0]*r.x+t[1]*r.y+t[2]*r.z,e.direction.y=t[4]*r.x+t[5]*r.y+t[6]*r.z,e.direction.z=t[8]*r.x+t[9]*r.y+t[10]*r.z,e.direction.normalize();const n=new p5.Vector(0,0,1),s=new p5.Vector(0,0,0),a=p5.Vector.sub(s,e.origin),o=Math.abs(p5.Vector.dot(e.direction,n));if(0===o)return null;const l=Math.abs(p5.Vector.dot(a,n)/o),c=p5.Vector.add(e.origin,e.direction.copy().setMag(l));return createVector(c.x,c.y)},p5.prototype.generateRay=function(e,t,i,r,n,s){const a=new p5.Vector(e,t,i);let o=new p5.Vector(r,n,s);o=p5.Vector.sub(o,a),o.normalize();let l=p5.instance._renderer.uMVMatrix.copy();l.transpose(l),l=l.mat4;const c=a.copy();a.x=l[0]*c.x+l[1]*c.y+l[2]*c.z+l[3],a.y=l[4]*c.x+l[5]*c.y+l[6]*c.z+l[7],a.z=l[8]*c.x+l[9]*c.y+l[10]*c.z+l[11];const h=o.copy();return o.x=l[0]*h.x+l[1]*h.y+l[2]*h.z,o.y=l[4]*h.x+l[5]*h.y+l[6]*h.z,o.z=l[8]*h.x+l[9]*h.y+l[10]*h.z,o.normalize(),{origin:a,direction:o}},window.p5xr={instance:null},"xr"in navigator==0?(window.injectedPolyfill=!0,window.polyfill=new At.default):window.injectedPolyfill=!1,p5.prototype.createVRCanvas=function(){noLoop(),p5xr.instance=new $r.default,p5xr.instance.initVR()},p5.prototype.createARCanvas=function(){noLoop(),p5xr.instance=new sn.default,p5xr.instance.initAR()},p5.prototype.setVRBackgroundColor=function(e,t,i){p5xr.instance.curClearColor=color(e,t,i)},p5.prototype.surroundTexture=function(e){push(),texture(e),rotateX(PI),scale(-1,1,1),sphere(300,60,40),pop()},p5.prototype.createAnchor=function(e){if(!p5xr.instance.isVR)return p5xr.instance.createAnchor(e)},p5.prototype.detectHit=function(e){if(!p5xr.instance.isVR)return p5xr.instance.detectHit(e)},p5.prototype.getXRInput=function(e){if(0!==p5xr.instance.xrSession.inputSources.length)return p5xr.instance.getXRInput(e)}})();